अजगर में सूची की समझ या जनरेटर के भाव के लिए लाइन निरंतरता


102

कैसे आप एक बहुत लंबी सूची समझ को तोड़ने वाले हैं?

[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]

मैंने कहीं न कहीं यह भी देखा है कि लोग लाइनों को तोड़ने के लिए '\ _' का उपयोग करना पसंद नहीं करते हैं, लेकिन कभी नहीं समझ पाए कि क्यों। इसके पीछे का कारण क्या है?


जवाबों:


143
[x
 for
 x
 in
 (1,2,3)
]

ठीक काम करता है, तो आप बहुत कृपया के रूप में आप कर सकते हैं। मैं व्यक्तिगत रूप से पसंद करूंगा

 [something_that_is_pretty_long
  for something_that_is_pretty_long
  in somethings_that_are_pretty_long]

कारण \की बहुत सराहना नहीं की जाती है, यह एक पंक्ति के अंत में दिखाई देता है , जहां यह या तो बाहर खड़ा नहीं होता है या अतिरिक्त पैडिंग की आवश्यकता होती है, जिसे तब निर्धारित करना पड़ता है जब लाइन की लंबाई बदलती है:

x = very_long_term                     \
  + even_longer_term_than_the_previous \
  + a_third_term

ऐसे मामलों में, parens का उपयोग करें:

x = (very_long_term
     + even_longer_term_than_the_previous
     + a_third_term)

47
विशेष रूप से, पंक्ति विराम अंदर अनदेखी कर रहे हैं किसी भी कोष्ठक - (), []और {}

23

मैं इसके विरोध में नहीं हूं:

variable = [something_that_is_pretty_long
            for something_that_is_pretty_long
            in somethings_that_are_pretty_long]

आपको \इस मामले में जरूरत नहीं है । सामान्य तौर पर, मुझे लगता है कि लोग इससे बचते हैं \क्योंकि यह थोड़ा बदसूरत है, लेकिन यह भी समस्या दे सकता है यदि यह लाइन पर बहुत आखिरी चीज नहीं है (सुनिश्चित करें कि कोई व्हाट्सएप इसका अनुसरण नहीं करता है)। मुझे लगता है कि आपकी लाइन की लंबाई कम रखने के लिए इसका उपयोग करना बेहतर है, हालांकि, इससे अधिक नहीं।

चूंकि \उपरोक्त मामले में आवश्यक नहीं है, या संक्षिप्त विवरण के लिए, मुझे वास्तव में यह काफी दुर्लभ लगता है कि मुझे इसका उपयोग करने की आवश्यकता है।


20

आप उन मामलों में कई इंडेंटेशन का उपयोग भी कर सकते हैं जहां आप कई डेटा संरचनाओं की सूची के साथ काम कर रहे हैं।

new_list = [
    {
        'attribute 1': a_very_long_item.attribute1,
        'attribute 2': a_very_long_item.attribute2,
        'list_attribute': [
            {
                'dict_key_1': attribute_item.attribute2,
                'dict_key_2': attribute_item.attribute2
            }
            for attribute_item
            in a_very_long_item.list_of_items
         ]
    }
    for a_very_long_item
    in a_very_long_list
    if a_very_long_item not in [some_other_long_item
        for some_other_long_item 
        in some_other_long_list
    ]
]

एक बयान का उपयोग करके यह भी देखें कि यह किसी अन्य सूची पर कैसे फ़िल्टर करता है। यदि अपनी स्वयं की लाइन के लिए स्टेटमेंट को छोड़ना उपयोगी है।


1
मुझे यह उत्तर विशेष रूप से पसंद है, क्योंकि यह लूप के लिए नेस्टेड सूची की समझ सहित लाइन ब्रेकिंग के कई पारंपरिक पहलुओं को दर्शाता है for
gustafbstrom
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.