पायथन में मल्टी-लाइन तानाशाही को प्रारूपित करने का उचित तरीका क्या है?


184

पायथन में, मैं अपने कोड में एक मल्टी-लाइन तानाशाह लिखना चाहता हूं। वहाँ कुछ तरीके हैं जो इसे प्रारूपित कर सकते हैं। यहाँ कुछ हैं जो मैं सोच सकता था:

  1. mydict = { "key1": 1,
               "key2": 2,
               "key3": 3, }
    
  2. mydict = { "key1": 1,
               "key2": 2,
               "key3": 3,
             }
    
  3. mydict = {
        "key1": 1,
        "key2": 2,
        "key3": 3,
    }
    

मुझे पता है कि उपरोक्त में से कोई भी वाक्यविन्यास सही है, लेकिन मुझे लगता है कि पायथन डाइट्स के लिए एक पसंदीदा इंडेंटेशन और लाइन-ब्रेक शैली है। यह क्या है?

नोट: यह वाक्य रचना का मुद्दा नहीं है। उपरोक्त सभी (जहां तक ​​मुझे पता है) मान्य पायथन कथन हैं और एक दूसरे के समतुल्य हैं।


12
1 और 2 के लिए: ब्रेसिज़ के अंदर सीधे स्थान नहीं, पीईपी 8 देखें।
स्वेन मार्नाच

3
मैं यह कहना चाहता हूं कि अजगर के पिं्रट मॉड्यूल में, यह आपके पहले उदाहरण का उपयोग करता है, बिना ब्रेसिज़ के सीधे अंदर।
charmoniumQ

जवाबों:


239

मैं # 3 का उपयोग करता हूं। लंबी सूचियों, टुपल्स आदि के लिए समान है। इसे इंडेंटेशन से परे किसी अतिरिक्त स्थान को जोड़ने की आवश्यकता नहीं है। हमेशा की तरह, सुसंगत रहें।

mydict = {
    "key1": 1,
    "key2": 2,
    "key3": 3,
}

mylist = [
    (1, 'hello'),
    (2, 'world'),
]

nested = {
    a: [
        (1, 'a'),
        (2, 'b'),
    ],
    b: [
        (3, 'c'),
        (4, 'd'),
    ],
}

इसी तरह, यहाँ किसी भी व्हाट्सएप को शुरू किए बिना बड़े स्ट्रिंग्स को शामिल करने का मेरा पसंदीदा तरीका है (जैसे कि यदि आप ट्रिपल-लाइन वाले मल्टी-लाइन स्ट्रिंग्स का उपयोग करते हैं तो आपको मिलेगा):

data = (
    "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABG"
    "l0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEN"
    "xBRpFYmctaKCfwrBSCrRLuL3iEW6+EEUG8XvIVjYWNgJdhFjIX"
    "rz6pKtPB5e5rmq7tmxk+hqO34e1or0yXTGrj9sXGs1Ib73efh1"
    "AAAABJRU5ErkJggg=="
)

क्या आप कुछ संदर्भ शामिल कर सकते हैं, मुझे इस पर एक आधिकारिक स्रोत खोजने में परेशानी हो रही है। (मैं आपसे सहमत हूं)।
तृफा

82
हम्म, मुझे यह मिल गया: stackoverflow.com/questions/6388187/…
FogleBird

6
उसे मत बताना लेकिन उस उपयोगकर्ता को पता नहीं है कि वह किस बारे में बात कर रहा है? पी
ट्रूफा

3
योग्य, अधिक गंभीरता से, मुझे "आधिकारिक" संदर्भ भी नहीं मिला। मैं तुम्हें बता दूँगा अगर मैं करता हूँ! शायद किसी को गुइडो से संपर्क करना चाहिए।
फोगबर्ड

2
यह PEP 8: python.org/dev/peps/pep-0008/#indentation से मेल खाता है । इंडेंटेशन पर अनुभाग के निचले भाग में कुछ सूची उदाहरण हैं।
आमस

31

सबसे पहले, जैसे स्टीवन रूंबल्स्की ने कहा, "PEP8 इस प्रश्न को संबोधित नहीं करता है", इसलिए यह व्यक्तिगत प्राथमिकता का मामला है।

मैं आपके प्रारूप 3 के समान लेकिन समान नहीं प्रारूप का उपयोग करूंगा। यहां मेरा है, और क्यों है।

my_dictionary = { # Don't think dict(...) notation has more readability
    "key1": 1, # Indent by one press of TAB (i.e. 4 spaces)
    "key2": 2, # Same indentation scale as above
    "key3": 3, # Keep this final comma, so that future addition won't show up as 2-lines change in code diff
    } # My favorite: SAME indentation AS ABOVE, to emphasize this bracket is still part of the above code block!
the_next_line_of_code() # Otherwise the previous line would look like the begin of this part of code

bad_example = {
               "foo": "bar", # Don't do this. Unnecessary indentation wastes screen space
               "hello": "world" # Don't do this. Omitting the comma is not good.
} # You see? This line visually "joins" the next line when in a glance
the_next_line_of_code()

btw_this_is_a_function_with_long_name_or_with_lots_of_parameters(
    foo='hello world',  # So I put one parameter per line
    bar=123,  # And yeah, this extra comma here is harmless too;
              # I bet not many people knew/tried this.
              # Oh did I just show you how to write
              # multiple-line inline comment here?
              # Basically, same indentation forms a natural paragraph.
    ) # Indentation here. Same idea as the long dict case.
the_next_line_of_code()

# By the way, now you see how I prefer inline comment to document the very line.
# I think this inline style is more compact.
# Otherwise you will need extra blank line to split the comment and its code from others.

some_normal_code()

# hi this function is blah blah
some_code_need_extra_explanation()

some_normal_code()

मुझे लाइन कमेंट में अच्छा लगा। मेरे पहले प्रोग्रामिंग प्रोफेसर (मैं पहले से ही वर्षों के लिए प्रोग्रामिंग कर रहा था) इनलाइन टिप्पणियों पर जोर दिया, लेकिन कभी भी प्रभावी ढंग से क्यों नहीं समझाया। अब आप एक अभ्यास के बारे में 20 साल के लिए इस्तेमाल किया है समझाया है।
जोशुआ के

अहा, धन्यवाद। हमारे पास प्रोग्रामिंग के संदर्भ में समान आयु, अनुभव और "माइलेज" है। इसलिए यदि आपने पहले ही 20 साल पहले इनलाइन टिप्पणी का अभ्यास शुरू कर दिया था (जो प्रभावशाली है!), तो आपको अभी भी 10 साल पहले अपने प्रोफेसर के स्पष्टीकरण की आवश्यकता क्यों थी जब आप अपने विश्वविद्यालय में थे? बस उत्सुक। :-)
रायलू

बहुत अच्छा सवाल :) ATARI बुनियादी और GWbasic व्यावहारिक रूप से इसे मजबूर किया, ऊपर-नीचे प्रवाह लाइन-आधारित संकलक। यह कुछ ऐसा है जिसे मैंने कागज पत्रिकाओं में पीटर नॉर्टन का बेसिक (और बाद में एएसएम कोड) पढ़ा। मैंने बीच में टर्बो पास्कल सीखा, लेकिन मैंने पहले ही पेपर पत्रिकाओं में उदाहरणों से सीख लिया था और बेसिक की सीमाओं के अनुरूप था।
जोशुआ के

PEP8 कुछ हद तक इसे संबोधित करता है क्योंकि यह एक उद्घाटन ब्रेस के तुरंत बाद एक स्थान जोड़ने के खिलाफ सिफारिश करता है, इसलिए ओपी में विकल्प 1 और 2 बाहर हैं।
डैनियल सेरोडियो

9

चूँकि आपकी चाबियाँ तार हैं और चूंकि हम पठनीयता के बारे में बात कर रहे हैं, इसलिए मैं पसंद करता हूँ:

mydict = dict(
    key1 = 1,
    key2 = 2,
    key3 = 3,
)

6
क्वार्ग्स को परिभाषित करते समय रिक्त स्थान का उपयोग न करें। c = function(a=1, b=2)अधिक "पायथोनिक" है।
स्टीव के

1

आमतौर पर, यदि आपके पास बड़ी अजगर वस्तुएँ हैं, तो उन्हें प्रारूपित करना काफी कठिन है। मैं व्यक्तिगत रूप से उसके लिए कुछ उपकरणों का उपयोग करना पसंद करता हूं।

यहाँ अजगर-ब्यूटिफायर है - www.cleancss.com/python-beautify जो तुरंत आपके डेटा को अनुकूलन शैली में बदल देता है।


0
dict(rank = int(lst[0]),
                grade = str(lst[1]),
                channel=str(lst[2])),
                videos = float(lst[3].replace(",", " ")),
                subscribers = float(lst[4].replace(",", "")),
                views = float(lst[5].replace(",", "")))

इस प्रश्न का उत्तर नहीं मिलता है
bagerard

-1

ट्यूटोरियल के साथ मेरे अनुभव से, और अन्य चीजें नंबर 2 हमेशा पसंदीदा लगती हैं, लेकिन यह किसी भी चीज से ज्यादा एक व्यक्तिगत पसंद है।


-6

आम तौर पर, आप अंतिम प्रविष्टि के बाद अल्पविराम को शामिल नहीं करेंगे, लेकिन पायथन आपके लिए इसे सही करेगा।


34
नहीं! हमेशा अंतिम अल्पविराम को शामिल करें, इसलिए यदि आप एक नया अंतिम तत्व जोड़ते हैं, तो आपको इससे पहले लाइन को बदलना नहीं होगा। यह पायथन के बारे में महान चीजों में से एक है: शुद्धता पर व्यावहारिकता।
नेड बैचेल्ड

2
इसके अतिरिक्त, यह उत्तर पूछे गए प्रश्न को संबोधित नहीं करता है।
RKD314
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.