টিউপল সংজ্ঞাতে কমা কমা করার সিনট্যাক্স নিয়ম কী?


119

একটি একক উপাদান টিউপলের ক্ষেত্রে, পিছনে কমা প্রয়োজন is

a = ('foo',)

একাধিক উপাদান সহ একটি tuple কি? দেখে মনে হচ্ছে ট্রেলিং কমা বিদ্যমান রয়েছে বা না, তারা উভয়ই বৈধ। এটা কি সঠিক? আমার মতে সম্পাদনা করার জন্য পিছনে কমা থাকা সহজ। এটি কি একটি খারাপ কোডিং শৈলী?

a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)

এখানে সিনট্যাক্সের নিয়মটি রয়েছে: ডকস.পিথন.অর্গ
কিরিল

উত্তর:


73

সমস্ত ক্ষেত্রে খালি টিপল বাদে কমা গুরুত্বপূর্ণ জিনিস। প্যারেন্টিসগুলি কেবল তখনই প্রয়োজন হয় যখন অন্যান্য সিন্ট্যাক্টিক কারণে প্রয়োজন: ফাংশন আর্গুমেন্ট, অপারেটর অগ্রাধিকারের সেট থেকে লুপটি আলাদা করতে বা লাইন ব্রেকগুলিকে অনুমতি দেওয়ার জন্য।

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

a = [
   "a",
   "b"
   "c"
]

ধরে নিই যে এটি 2 উপাদান তালিকা হিসাবে শুরু হয়েছিল যা পরে প্রসারিত হয়েছিল এটি সম্ভবত তাত্ক্ষণিকভাবে সুস্পষ্টভাবে ভুল হয়ে গেছে। সর্বদা পেছনের কমা অন্তর্ভুক্ত করুন এবং আপনি সেই ফাঁদটি এড়ান।


3
উপরে বর্ণিত কারণগুলির জন্য, কমা রেখে যাওয়া সুবিধাজনক হতে পারে। অন্যদিকে, এই অভ্যাসটি গ্রহণ করা আপনার মাথাব্যথার কারণ হতে পারে যদি আপনি নিজের অ্যাপ্লিকেশনটিতে অন্য কোথাও জাভাস্ক্রিপ্ট বা জেএসএন ব্যবহার করছেন, কারণ কিছু ব্রাউজার সেখানে এটি পছন্দ করে না।
সিটো

7
হ্যাঁ তবে, আপনার হাত দ্বারা জেএসএন কখনই তৈরি করা উচিত নয় যাতে এটি কোনও ব্যাপার না এবং জাভাস্ক্রিপ্টের জন্য ব্রাউজারের কাছে যাওয়ার আগে এই ধরণের ত্রুটিটি ধরার জন্য সর্বদা jslint বা সমতুল্য ব্যবহার করুন।
ডানকান

100

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

(1)  # the number 1 (the parentheses are wrapping the expression `1`)
(1,) # a 1-tuple holding a number 1

একাধিক আইটেমের জন্য, এটি আর প্রয়োজন হয় না কারণ এটি পুরোপুরি পরিষ্কার যে এটি একটি টিপল। তবে, পেছনের কমাটি একাধিক লাইনকে আরও সহজ করে তাদের সংজ্ঞায়িত করার অনুমতি দেয়। আপনি সিন্টেক্সটি না ভেঙে শেষের দিকে যুক্ত করতে বা আইটেমগুলিকে পুনর্বিন্যাস করতে পারেন কারণ আপনি দুর্ঘটনায় কমা রেখে গেছেন।

যেমন,

someBigTuple = (
                   0,
                   1,
                   2,
                   3,
                   4,
                   5,
                   6,
                   7,
                   8,
                   9,
                   10,
                   #...
                   10000000000,
               )

নোট করুন যে এটি অন্যান্য সংগ্রহগুলিতেও প্রযোজ্য (যেমন, তালিকা এবং অভিধান) এবং কেবল টিপলস নয়।


5
এটি টিপলসের চেয়ে অন্যান্য স্টাফের জন্যও বৈধ poin এটি key: value,প্রতি লাইনে এক থাকার জন্য খুব দরকারী , এবং নতুন স্টাফ যুক্ত করার সময় কমাটির যত্ন নেবেন না।
জোউল

46

পেছনের কমাগুলির আরেকটি সুবিধা হ'ল এটি ডিফগুলি আরও সুন্দর দেখায়। আপনি যদি দিয়ে শুরু

a = [
    1,
    2,
    3
]

এবং এটিতে পরিবর্তন

a = [
    1,
    2,
    3,
    4
]

ভিন্ন মত দেখতে হবে

 a = [
     1,
     2,
-    3
+    3,
+    4
 ]

আপনি যদি একটি পেছনের কমা দিয়ে শুরু করে থাকেন তবে

a = [
    1,
    2,
    3,
]

তাহলে ভিন্নতা ঠিক হবে

 a = [
     1,
     2,
     3,
+    4,
 ]

এটি মূল প্রশ্নের উত্তরের চেয়ে একটি মন্তব্যের চেয়ে বেশি সত্য, তবে আমি সত্যিকার অর্থে কমা দেওয়ার পক্ষে যুক্ত যুক্তিটি পছন্দ করি।
ম্যাড পদার্থবিজ্ঞানী


8

এছাড়াও, আপনি যে পরিস্থিতিটি চান তা বিবেচনা করুন:

>>> (('x','y'))*4                         # same as ('x','y')*4
('x', 'y', 'x', 'y', 'x', 'y', 'x', 'y')
#Expected = (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))

সুতরাং এক্ষেত্রে বাহ্যিক বন্ধনীগুলি গোষ্ঠীকরণের বন্ধনীর চেয়ে বেশি কিছু নয়। এগুলিকে টিপল করতে আপনার একটি ট্রিলিং কমা যুক্ত করতে হবে। অর্থাত

>>> (('x','y'),)*4 
(('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))

6

ট্রেলিং কমা শুধুমাত্র এক-উপাদান টিউপসগুলির জন্য প্রয়োজনীয় les বৃহত্তর টিপলসগুলির জন্য একটি পিছনে কমা থাকা শৈলীর বিষয় এবং এটির প্রয়োজন নেই। এর সর্বাধিক সুবিধা হ'ল প্রায়শই সংশোধিত (যেমন কনফিগারেশন টিপলস) মাল্টি-লাইন বড় টিউপসযুক্ত ফাইলগুলিতে ক্লিন ডিফ।


6

এটি একটি সহজ উত্তর।

a = ("s") একটি স্ট্রিং

এবং

a = ("s",) হ'ল একটি উপাদানযুক্ত একটি টিপল।

স্ট্রিং এবং টিউপলের মধ্যে পার্থক্য করার জন্য একটি উপাদানকে টিপল দেওয়ার ক্ষেত্রে পাইথনের অতিরিক্ত কমা প্রয়োজন needs

উদাহরণস্বরূপ পাইথন কনসোলে এটি ব্যবহার করে দেখুন:

a = ("গুলি")

a = a + (1,2,3)

ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):

মডিউলটিতে স্ট্যান্ডিন, লাইন 1, ফাইল করুন

প্রকারের ত্রুটি: 'আরআর' এবং 'টিপল' অবজেক্টগুলিকে সংযুক্ত করতে পারে না


4

এর অন্য একটি কারণ যা বিদ্যমান তা হ'ল এটি কোড তৈরি এবং __repr__ফাংশনগুলিকে আরও সহজ করে তোলে । উদাহরণস্বরূপ, যদি আপনি কিছু বস্তু যে ভালো নির্মিত হয় obj(arg1, arg2, ..., argn), তাহলে আপনি ঠিক লিখতে পারেন obj.__repr__যেমন

def __repr__(self):
    l = ['obj(']
    for arg in obj.args: # Suppose obj.args == (arg1, arg2, ..., argn)
        l.append(repr(arg))
        l.append(', ')
    l.append(')')
    return ''.join(l)

যদি একটি পিছনে কমা অনুমোদিত না হয়, আপনি শেষ যুক্তি বিশেষ ক্ষেত্রে হতে হবে। প্রকৃতপক্ষে, আপনি তালিকা বোধগম্যতা ব্যবহার করে উপরের এক লাইনে লিখতে পারতেন (এটি পড়ার পক্ষে আরও সহজ করার জন্য আমি এটি দীর্ঘ লিখে দিয়েছি)। এটি করা এত সহজ হবে না যদি আপনার শেষ পদের বিশেষ কেস থাকে।


2
বিশেষ-ক্ষেত্রে কোন প্রয়োজন গত যুক্তি, এক মাত্র ব্যবহার করতে পারে সেখানে হবে joinযে ক্ষেত্রে: def __repr__(self): 'obj(' + ', '.join([repr(arg) for arg in obj.args]) + ')'
সুজান ডুপোরন

এটি কোড জেনারেশনে সহায়তা করে এমনকি এমন সরঞ্জামগুলি থেকেও যা পাইথনে লেখা নেই এবং এর মতো সুন্দর ফাংশন নেই join
asmeurer

2

পিইপি 8 - পাইথন কোডের জন্য স্টাইল গাইড - কখন ট্রিলিং কমা ব্যবহার করতে হবে

ট্রেলিং কমাগুলি সাধারণত alচ্ছিক হয়, কেবলমাত্র একটি উপাদানটির টিপল তৈরি করার সময় এগুলি বাধ্যতামূলক হয় (এবং পাইথন 2 এ তাদের মুদ্রণ বিবৃতিতে শব্দার্থক থাকে)। স্বচ্ছতার জন্য, এটি পরবর্তীকালে (প্রযুক্তিগতভাবে রিডানড্যান্ট) প্রথম বন্ধনী ঘিরে ফেলা বাঞ্ছনীয়।

হ্যাঁ:

FILES = ('setup.cfg',)

ঠিক আছে, তবে বিভ্রান্তিকর:

FILES = 'setup.cfg',

যখন ট্রেলিং কমাগুলি অনর্থক হয় তখন যখন সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করা হয় তখন মানগুলি, আর্গুমেন্টগুলি বা আমদানি করা আইটেমগুলির তালিকা সময়ের সাথে সাথে প্রসারিত হওয়া প্রত্যাশিত হয় they প্যাটার্নটি হ'ল প্রতিটি মান (ইত্যাদি) নিজেই একটি লাইনে রেখে সর্বদা একটি অনুগামী কমা যোগ করা এবং পরবর্তী লাইনে ঘনিষ্ঠ বন্ধনী / বন্ধনী / ব্রেস যুক্ত করা। তবে সমাপ্তি ডিলিমিটারের (একইভাবে সিঙ্গলটন টিউপসগুলির উপরের ক্ষেত্রে বাদে) একই লাইনে ট্রেলিং কমা পাওয়া কোনও অর্থবোধ করে না।

হ্যাঁ:

FILES = [
    'setup.cfg',
    'tox.ini',
    ]
initialize(FILES,
           error=True,
           )

নং:

FILES = ['setup.cfg', 'tox.ini',]
initialize(FILES, error=True,)

-5

কোডিং শৈলীটি আপনার স্বাদ, আপনি যদি মানক কোডিংয়ের কথা ভাবেন তবে এমন একটি পিইপি -8 রয়েছে যা আপনাকে গাইড করতে পারে।

নিম্নলিখিত মত প্রকাশের ফলাফল সম্পর্কে আপনি কী ভাবেন?

x = (3)
x = (3+2)
x = 2*(3+2)

হ্যাঁ, এক্স কেবল একটি সংখ্যা।


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