পাইথনে একাধিক-লাইন ডক ফর্ম্যাট করার উপযুক্ত উপায় কী?


182

পাইথনে, আমি আমার কোডে একটি বহু-লাইন বাক্য লিখতে চাই। এটির ফর্ম্যাট করতে পারে এমন বেশ কয়েকটি উপায় রয়েছে। এখানে আমি কয়েকটি ভাবতে পারি যে:

  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

উত্তর:


238

আমি # 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
এটি পিইপি 8 এর সাথে মেলে: পাইথন.আর / দেবদেব / পেপস / পেপ-0008 / # ইন্ডেন্টেশন । ইন্ডেন্টেশন সম্পর্কিত বিভাগের নীচে কয়েকটি তালিকার উদাহরণ রয়েছে।
এমএস

30

সবার আগে, যেমন স্টিভেন রাম্বালস্কি বলেছিলেন, "পিইপি 8 এই প্রশ্নটিকে সম্বোধন করে না", তাই এটি ব্যক্তিগত পছন্দের বিষয়।

আমি আপনার ফর্ম্যাট 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 বছর পূর্বে আপনার কেন তার অধ্যাপকের ব্যাখ্যা দরকার ছিল? উৎসুক. :-)
রায়লুও

খুব ভাল প্রশ্ন :) আটারি বেসিক এবং জিডাব্লুবাসিক ব্যবহারিকভাবে এটিকে বাধ্য করেছে, টপ-ডাউন ফ্লো লাইন-ভিত্তিক সংকলক। আমি পেটার নর্টনের বেসিক (এবং পরে এএসএম কোড) কাগজের ম্যাগাজিনে পড়ার সময় এটি গ্রহণ করেছি। আমি এর মধ্যে টার্বো পাস্কেল শিখেছি, তবে আমি ইতিমধ্যে কাগজের ম্যাগাজিনগুলির উদাহরণগুলি থেকে শিখেছি এবং বেসিকের সীমাবদ্ধতাগুলি মেনেছি।
জোশুয়া কে

পিইপি 8 কিছুটা এটিকে সম্বোধন করে যেহেতু এটি খোলার ধনুর্বন্ধনী সঙ্গে সঙ্গে কোনও স্থান যুক্ত করার বিরুদ্ধে সুপারিশ করে, সুতরাং ওপিতে 1 এবং 2 বিকল্পগুলি বাইরে।
ড্যানিয়েল সেরোদিও

9

যেহেতু আপনার কীগুলি স্ট্রিং এবং যেহেতু আমরা পাঠযোগ্যতার কথা বলছি, তাই আমি পছন্দ করি:

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

6
কাওয়ার্গগুলি সংজ্ঞায়িত করার সময় স্পেস ব্যবহার না করা পছন্দ করুন। c = function(a=1, b=2)আরও "পাইথোনিক"।
স্টিভ কে

1

সাধারণত, আপনার কাছে বড় অজগর বস্তু থাকলে এগুলি ফর্ম্যাট করা বেশ শক্ত। আমি ব্যক্তিগতভাবে সে জন্য কিছু সরঞ্জাম ব্যবহার পছন্দ করি।

এখানে পাইথন-বিউটিফায়ার - www.cleancss.com/python-beaufy যা তাত্ক্ষণিকভাবে আপনার ডেটাগুলিকে কাস্টমাইজেবল স্টাইলে রূপান্তরিত করে।



-1

টিউটোরিয়ালগুলির সাথে আমার অভিজ্ঞতা থেকে এবং 2 নম্বর অন্যান্য জিনিসগুলি সর্বদা পছন্দসই বলে মনে হয় তবে এটি অন্য যে কোনও কিছুর চেয়ে ব্যক্তিগত পছন্দ।


-6

সাধারণত, আপনি চূড়ান্ত প্রবেশের পরে কমা অন্তর্ভুক্ত করবেন না, তবে পাইথন এটি আপনার জন্য সংশোধন করবে।


34
না! সর্বদা চূড়ান্ত কমা অন্তর্ভুক্ত করুন, সুতরাং আপনি যদি একটি নতুন শেষ উপাদান যুক্ত করেন তবে আপনাকে এর আগে লাইনটি পরিবর্তন করতে হবে না। পাইথন সম্পর্কে এটি দুর্দান্ত কাজগুলির মধ্যে একটি: বিশুদ্ধতার উপরে ব্যবহারিকতা।
নেড ব্যাচেল্ডার

2
অতিরিক্তভাবে, এই উত্তরটি জিজ্ঞাসিত প্রশ্নের সমাধান করে না।
আরকেডি 314
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.