2017-05-18 9 views
5

पर पाइथन पर बदलाव कुछ पायथन कोड वाक्यविन्यास में चला गया जो मैंने पहले कभी नहीं देखा है। यहां एक उदाहरण दिया गया है:कथन वाक्यविन्यास

i = 0 
for spam in range(10): 
    i += [1, 3][i > 5] 
    print(i) 

परिणाम 1,2,3,4,5,6,9,12,15,18 का अनुक्रम है। इसलिए, यह 1 से i > 5 तक बढ़ता है, उसके बाद 3 से बढ़ता है। लाइन

इससे पहले, मैं लिखा है के रूप में:

if i > 5: 
    i += 3 
else: 
    i += 1 

तो लाइन क्या है: i += [1, 3][i > 5]?

  • आप उस वाक्यविन्यास संरचना को क्या कहते हैं?
  • क्या यह सूची समझ या कुछ और पूरी तरह से कुछ है?

वाक्यविन्यास दिलचस्प है और मैं इसके बारे में अधिक पढ़ना चाहता था, लेकिन यह नहीं पता कि कहां देखना है।

संपादित करें: धन्यवाद डार्कस्टारोन। मैंने सूची सूची को वापस करने के लिए अभिव्यक्ति का उपयोग करने के बारे में कभी सोचा नहीं था। वो बहुत कूल है। इसका मतलब यह है कि आप चीजों को भी कर सकते हैं जैसे: spam = ["Even", "Odd"][eggs % 2] एक भी या अजीब स्ट्रिंग या foo = ["A", "B", "C"][zot % 3] को ज़ोट के मानों के माध्यम से लूप करते समय तीन विकल्पों के माध्यम से चक्र के लिए।

शायद इस निर्माण का उपयोग करने की आदत नहीं बनाएगी क्योंकि अन्य अभिव्यक्तियों को समझना आसान है। लेकिन, मैं इसे उस सही स्थिति के लिए बैग ओ 'चाल में ले जाऊंगा।

+2

इसका कोई विशेष नाम नहीं है, वे सिर्फ एक सूची में अनुक्रमणित कर रहे हैं: 'True == 1' और' गलत == 0'। यह एक सूची समझ नहीं है, जिसमें 'के लिए' और 'इन' होगा। यह वास्तव में आपके वर्तमान भ्रम के कारण इसे लिखने का एक शानदार तरीका भी नहीं है, बनाम एक अधिक सरल टर्नरी अभिव्यक्ति बनाम। – jonrsharpe

+0

यह "सूची सूचकांक के साथ उस टर्नरी क्लज" है, जो कि "उस टर्नरी क्लज के साथ और/या" ('i> 5 और 3 या 1') और" वास्तविक सशर्त अभिव्यक्ति वाक्यविन्यास "से अलग है (' 3 अगर i> 5 अन्य 1')। – user2357112

+0

यह बहुत अच्छा वाक्य रचनात्मक चीनी है। यह पहली बार देखने पर बहुत अस्पष्ट है लेकिन प्रकृति में इसकी टर्नरी को महसूस करने के बाद यह वास्तव में बहुत स्पष्ट हो जाता है, हालांकि इसे विस्तारित करने से यह सूची-सूचकांक हो सकता है, क्योंकि मुझे लगता है कि आप केवल चीजों को घोंसला कर सकते हैं। यह थोड़ा बालों वाला हो सकता है ... '' '[[1,3] [के> 4], [4,5] [के> 6]] [के> 6]' ' –

उत्तर

3

तो मैं क्या मानना ​​है कि यहाँ क्या हो रहा है सूची ([1,3]) या तो किया जा सकता है:

[1,3][0] # 1 

या

[1,3][1] # 3 

यह इस तथ्य का लाभ उठा रहा है कि 0 == False और 1 == True। यह थोड़ा साफ है, हालांकि थोड़ा अपारदर्शी है। मैं शायद इसे इस तरह लिखा होगा:

i = 0 
for _ in range(10): 
    i += 3 if i > 5 else 1 
    print(i) 
0

त्रिगुट ऑपरेटर, इस तरह लिखा है:

i += 3 if i > 5 else 1 
+0

हालांकि, यह ओपी के सवाल का जवाब नहीं देता है। वे क्या देख रहे हैं * एक टर्नरी अभिव्यक्ति नहीं है (ऑपरेटर नहीं)। – jonrsharpe

संबंधित मुद्दे