কেন একটি তালিকায় পিছনে কমা অনুমোদিত?


135

আমি কৌতূহল যে পাইথনে কেন একটি তালিকার পিছনে কমাটি বৈধ বাক্য গঠন এবং এটি দেখে মনে হয় যে পাইথন কেবল এটিকে উপেক্ষা করে:

>>> ['a','b',]
['a', 'b']

এটি যখন থেকে একটি টিপল ('a')এবং ('a',)দুটি ভিন্ন জিনিস, তবে তালিকাগুলিতে এটি বোধগম্য হয়?



7
সি, সি ++, জাভা, জাভাস্ক্রিপ্ট ইত্যাদির তালিকায় একটি পিছনে কমা অনুমোদিত হয়
নায়ুকি

উত্তর:


223

এর প্রধান সুবিধা হ'ল এটি বহু-লাইন তালিকা সম্পাদনা করা সহজ করে এবং এটি বিশৃঙ্খলায় খসখসে হ্রাস করে।

পরিবর্তন করা হচ্ছে:

s = ['manny',
     'mo',
     'jack',
]

প্রতি:

s = ['manny',
     'mo',
     'jack',
     'roger',
]

ডিফের মধ্যে কেবল একটি লাইন পরিবর্তন জড়িত:

  s = ['manny',
       'mo',
       'jack',
+      'roger',
  ]

যখন পিছনের কমাটি বাদ দেওয়া হয়েছিল তখন আরও বিভ্রান্তিকর বহু-লাইন পার্থক্যটি বজায় রাখে:

  s = ['manny',
       'mo',
-      'jack'
+      'jack',
+      'roger'
  ]

পরের তফাতটি কেবল একটি লাইন যুক্ত হয়েছিল এবং অন্য রেখার বিষয়বস্তু পরিবর্তন হয়নি তা দেখতে আরও শক্ত করে তোলে।

এটি এটি করার ঝুঁকিও হ্রাস করে:

s = ['manny',
     'mo',
     'jack'
     'roger'  # Added this line, but forgot to add a comma on the previous line
]

এবং অন্তর্নিহিত স্ট্রিং আক্ষরিক সম্মিলন ট্রিগার , s = ['manny', 'mo', 'jackroger']উদ্দেশ্যে ফলাফল পরিবর্তে উত্পাদন ।


6
এটি (সর্বাধিক) ধারণাটি তৈরি করে, তবে ভাষার পার্সারটি আলাদা করার সহজতর করার জন্য ডিজাইন করা থাকলে আমি সত্যিই অবাক হব।
বুরহান খালিদ

94
@ বুরহান খালিদ: ভাষা ডিজাইনাররা প্রোগ্রামার এবং প্রোগ্রামাররা তাদের জীবনকে সহজ করার জন্য অনেক কিছুই করে।
গ্রেগ হিউগিল

10
@ বুরহান আপনি যদি এই ব্যাখ্যাটি বিশ্বাস করেন না, তবে কীভাবে ব্যাকরণটিকে সেভাবে সংজ্ঞায়িত করা সহজ? ;) তুলনা List = "[" {Item ","} "]".বনামList = "[" ({Item","}Item|)"]".
ভু

23
এটি অন্যান্য প্রোগ্রামগুলিকে কোড স্বয়ংক্রিয়ভাবে তৈরি করাও সহজ করে তোলে - প্রতিটি আইটেমের জন্য শেষ আইটেম বাদে "\"item\","প্রিন্ট করা তার চেয়ে প্রতিটি আইটেমের জন্য প্রিন্ট করা অনেক সহজ । "\"item\""","
অ্যাডাম রোজেনফিল্ড

9
@ ভু আমিও একই ধারণা করেছিলাম তবে পরবর্তী ব্যাকরণটিকে যাইহোক সংজ্ঞায়িত করতে হবে কারণ এটি এখনও একটি বৈধ পাইথনের তালিকা on
আলেকজান্ডার সুর্যাপেল

34

অ্যারেতে ট্রেলিং কমা করার অনুমতি দেওয়ার জন্য এটি একটি সাধারণ সিনট্যাকটিকাল কনভেনশন, সি এবং জাভা এর মতো ভাষা এটির অনুমতি দেয় এবং পাইথন মনে হয় যে এটি তালিকাভুক্ত ডেটা কাঠামোর জন্য এই সম্মেলনটি গ্রহণ করেছে। তালিকা তৈরির জন্য কোড উত্পন্ন করার সময় এটি বিশেষত কার্যকর: কেবলমাত্র উপাদান এবং কমাগুলির ক্রম তৈরি করুন, শেষটিকে কমা না হওয়া উচিত বলে একটি বিশেষ কেস হিসাবে বিবেচনা করার দরকার নেই।


30

এটি একটি নির্দিষ্ট ধরণের বাগ দূর করতে সহায়তা করে। এটি একাধিক লাইনে তালিকা লিখতে কখনও কখনও পরিষ্কার হয় sometimes তবে পরে, মেইনটেনেসে আপনি আইটেমগুলি পুনরায় সাজিয়ে নিতে চাইতে পারেন।

l1 = [
        1,
        2,
        3,
        4,
        5
]

# Now you want to rearrange

l1 = [
        1,
        2,
        3,
        5
        4,
]

# Now you have an error

তবে আপনি যদি পূর্ববর্তী কমাগুলিকে অনুমতি দেন এবং সেগুলি ব্যবহার করেন, আপনি কোনও ত্রুটি প্রবর্তন না করেই সহজেই লাইনগুলিকে পুনর্বিন্যাস করতে পারেন।


1
এটি পরিষ্কার, তবে আপনি কমাটি প্রাক-মুলতুবি রেখে এড়াতে পারবেন। এসকিউএল লেখার সময় আমি সমস্ত সময় তা করি
বুরহান খালিদ

38
এমনকি যদি আপনি প্রতিটি উপাদানের কাছে কমা প্রিপেন্ড করেন তবে আপনাকে প্রথমে কমাটি বাদ দিতে হবে।
গ্রেগ হিউগিল

একটি লিন্টার এটি ধরতে সক্ষম হবে, না?
viki.omega9

6

একটি টিউপল আলাদা কারণ কারণ ('a')প্রচ্ছন্ন ধারাবাহিকতা ব্যবহার করে প্রসারিত ()অপারেটর হিসাবে প্রসারিত হয় , যেখানে ('a',)দৈর্ঘ্য 1 টি টুপল বোঝায়।

আপনার আসল উদাহরণটি হত tuple('a')


('a'),একটি স্ট্রিং; তবে আমার বক্তব্যটি ছিল যে টিউপসগুলিতে ট্রেলিং কমাগুলি তাৎপর্যপূর্ণ তবে তালিকার মধ্যে তারা পাইথন সেগুলি গ্রহণ করে বলে মনে হয় না।
বুরহান খালিদ

1
তারা উভয় ক্ষেত্রে নিঃশব্দে ফেলে দেওয়া হয়, এটি কেবলমাত্র একটি টুপলে এটি ব্র্যাকেটের স্ট্রিং থেকে পৃথক করা প্রয়োজন।
সমৃদ্ধ

tuple('a')সম্ভবত এটি একটি খারাপ উদাহরণ, কারণ সাধারণভাবে tuple(x)এবং (x,)একই জিনিস নয়। tuple('ab') != ('ab',)tuple('a') == ('a',)শুধুমাত্র কারণ 'a'দৈর্ঘ্য 1 স্ট্রিং
চিপনার

REPL থেকে: >>> ("a",) == ("a") মিথ্যা >>> ("ab",) == ("ab") মিথ্যা >>> ("ab", "bc",) == ("ab", "bc") সত্য
সেরফ্যা

1

মূল কারণ হ'ল ডিফকে কম জটিল করে তোলা। উদাহরণস্বরূপ আপনার একটি তালিকা রয়েছে:

list = [
    'a',
    'b',
    'c'
]

এবং আপনি এটিতে অন্য একটি উপাদান যুক্ত করতে চান। তারপরে আপনি এটি শেষ করবেন:

list = [
    'a',
    'b',
    'c',
    'd'
]

সুতরাং, ডিফ দুটি দেখায় যে দুটি লাইন পরিবর্তন করা হয়েছে, প্রথমে 'গ' এর সাথে সামঞ্জস্য রেখে 'শেষ' লাইনে 'ডি' যুক্ত করুন।

সুতরাং, পাইথন তালিকার শেষ উপাদানটিতে ',' অনুসরণ করার অনুমতি দেয়, যাতে অতিরিক্ত বিভেদ রোধ করতে পারে যা বিভ্রান্তি সৃষ্টি করতে পারে।

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