اشکان محمدی
اشکان محمدی
خواندن ۲ دقیقه·۳ سال پیش

عملگر =, در پایتون !؟

سلام دوستان. امیدوارم امتحانات رو به خوبی پشت سر گذاشته باشید هرچند می دونم دل خیلی هاتون خونه ... (مخصوصا اونهایی که امتحان حضوری داشتن)




چند وقت پیش به یک کد پایتون برخورد کردم که همچین ساختاری داشت:

items = [1] item ,= items

آیا می تونید حدس بزنید که مقدار item الان چیه؟ ساده است، فقط کافیه که این کد ها رو در ترمینال بزنید و بعد مقدار item رو print کنید

print (item) #1

همون طور که می بینید متغیر item مقدارش 1 است. اما چطور چنین چیزی اتفاق می افته؟ =, دیگه چیه؟

معرفی به list unpacking در پایتون

وقتی که شما بخواهید آیتم های یک لیست رو به ترتیب در متغیر های مستقل ذخیره کنید از list unpacking استفاده می کنید. به نمونه زیر نگاه کنید:

numbers = [1, 2, 3] one, two, three = numbers

در مثال بالا می بینید که لیست ما شامل 3 عدد است و 3 متغیر به ازای هر کدام تعریف شده است. اما در اینجا یک مورد استثناء وجود داره. چه می شه اگر list ما فقط 1 عضو داشته باشه و ما بخواهیم از list unpacking استفاده کنیم؟ قطعا نمی توانیم بدین شکل مقدار تنها عضو داخل list رو در یک متغیر مستقل ذخیره کنیم:

numbers = [1] one = numbers # creates a reference to `numbers`, `one` is a list not an int

پس راه حل این قضیه چیه؟ یه راه حل ممکن اینه که از list slicing استفاده کنیم:

one = numbers[0]

راه حل تمیز و خوانایی هست ولی یه راه حل غیر معمول دیگه هم هست:

one, = numbers

درست متوجه شدید، اون "," که بعد از one قرار گرفته صرفا به خاطر اینه مفسر پایتون بتونه تشخیص بده که ما یک reference به numbers نمی خواهیم بلکه می خواهیم مقدار اولین عضوش رو در متغیر one ذخیره کنیم.

استفاده های دیگه کاما در پایتون

البته این تنها استفاده "," (کاما) در پایتون نیست و در بعضی سناریو های دیگه هم از کاما برای فهموندن موارد مشابه به پایتون استفاده می کنیم. مثلا توی پایتون می تونید string ها رو به این صورت هم بنویسید

(&quotthis is a string&quot &quotthis is another string&quot &quotthis is just an example&quot) # notice that there is no &quot,&quot between strings

چیزی که اتفاق می افته اینه که 3 string بالا به هم وصل میشن و 1 string واحد رو تشکیل میدن. به خاطر همین عبارت زیر یک tuple محسوب نمیشه بلکه یک string هست

test = (&quotthis is going to be a string not a tuple&quot) print (type (test)) #<class 'str'>

حالا فقط کافیه که یک کاما بعد string در پرانتز اضافه کنیم که مفسر پایتون متوجه بشه که این یک tuple هست.

test = (&quotthis is going to be a tuple&quot,) print (type (test)) #<class 'tuple'>

همچنین درمورد اعداد هم باید همین طور عمل کنید:

i = (1) # int i = (1,) # tuple




خوب دوستان به انتهای پست رسیدیم. خیلی ممنون که وقتتون رو گذاشتید و این مطلب رو خوندید. اگه خوشتون اومد حتما لایک کنید و اگه سوال، پیشنهاد یا انتقادی داشتید در کامنت ها اطلاع بدید.

شاید از نوشته های دیگه ام هم خوشتون بیاد:

https://virgool.io/@mohammadiashkan1384/4-tips-to-create-better-scripts-in-python-ul4ghbetonny
https://virgool.io/@mohammadiashkan1384/%D8%A7%D9%88%D9%84%DB%8C%D9%86-%D8%AA%DB%8C%DA%A9%D9%87-%DA%A9%D8%AF%DB%8C-%DA%A9%D9%87-%D8%AA%D9%88-%D8%B9%D9%85%D8%B1%D8%AA%D9%88%D9%86-%D9%86%D9%88%D8%B4%D8%AA%DB%8C%D8%AF-%DA%86%DB%8C-%D8%A8%D9%88%D8%AF-iirvviygvzu2
https://virgool.io/@mohammadiashkan1384/a-cool-python-coding-challenge-hbln1d9anhqp
https://virgool.io/@mohammadiashkan1384/how-to-implement-a-plugin-system-in-python-gncjrnf3qqie
https://coderlife.ir/how-to-us-the-walrus-operator-in-python-g0j4p0y5kwag


پایتونبرنامه نویسیpythonprogrammingآموزش
یه برنامه نویس ساده که از تجربیات و آموخته هاش می نویسه
شاید از این پست‌ها خوشتان بیاید