পাইথনের তালিকাগুলি বোঝার জন্য বা জেনারেটরের এক্সপ্রেশনগুলির জন্য লাইন ধারাবাহিকতা


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

এই ধরনের ক্ষেত্রে, প্যারেন্স ব্যবহার করুন:

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
গুস্তাফব্রস্টম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.