۲۰ نکته کدنویسی پایتون و ترفندهایی که نمی دانید (مقدماتی-پیشرفته)
پایتون یک زبان برنامه نویسی محبوب، عمومی و پر کاربرد است. برای علوم داده و یادگیری ماشین، محاسبات علمی در بسیاری از زمینه ها، توسعه وب، برنامه های کاربردی موبایل و دسکتاپ و موارد دیگر استفاده می شود. بسیاری از شرکت های مشهور از پایتون استفاده می کنند: گوگل، دراپ باکس، فیس بوک، موزیلا ، IBM ، Quora ، Amazon ، Spotify ، NASA ، Netflix ، Reddit و بسیاری موارد دیگر.
پایتون و همچنین بیشتر محصولات مرتبط با آن رایگان و منبع باز هستند. همچنین، جامعه بزرگ، اختصاصی و دوستانه از برنامه نویسان و سایر کاربران دارد.
دانلود کنید: دانلود رایگان ۴ تا از بهترین جزوه های PDF آموزش برنامه نویسی پایتون
نحو (syntax) آن با سادگی، خوانایی و ظرافت در ذهن طراحی شده است. در این مقاله ۲۰ نکته و ترفند پایتون ارائه شده است که می توانند مفید واقع شوند.
۱- Zen پایتون
Zen پایتون که با نام PEP 20 نیز شناخته می شود، متنی کوچک توسط Tim Peters است که نمایانگر اصول راهنما برای طراحی و استفاده از پایتون است. می توان آن را در وب سایت پایتون پیدا کنید، اما همچنین می توانید آن را در یک ترمینال (کنسول) یا نوت بوک Jupyter با یک عبارت واحد نیز دریافت کنید:
>>> import this
The Zen of Python, by Tim PetersBeautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
۲- تخصیص زنجیره ای
اگر برای اشاره به یک شیء یکسان به چندین متغیر احتیاج دارید، می توانید از تخصیص زنجیره ای استفاده کنید:
>>> x = y = z = 2
>>> x, y, z
(۲, ۲, ۲)
منطقی و ظریف است.
۳- مقایسه زنجیره ای
شما می توانید چندین مقایسه زنجیره ای با یک عبارت پایتون را با زنجیره ای از عملگرهای مقایسه ادغام کنید. اگر همه مقایسه ها صحیح باشند، عبارت True را بر می گرداند در غیر اینصورت عبارت False:
>>> x = 5
>>> 2 < x ≤ ۸
True
>>> 6 < x ≤ ۸
False
این شبیه به (۲ <x) و (x ≤ ۸) و (۶ <x) و (x ≤ ۸) است ، اما فشرده تر است و نیاز به x دارد که فقط یک بار ارزیابی شود.
عبارت زیر هم قانونی است:
>>> 2 < x > 4
True
می توانید بیش از دو مقایسه زنجیره ای داشته باشید:
>>> x = 2
>>> y = 8
>>> 0 < x < 4 < y < 16
True
۴- مقداردهی چندگانه
شما می توانید به چندین متغیر در یک بیانیه مانند شکل زیر مقدار اختصاص دهید:
>>> x, y, z = 2, 4, 8
>>> x
۲
>>> y
۴
>>> z
۸
لطفاً توجه داشته باشید که ۲ ، ۴ ، ۸ در جمله اول معادل (۲ ، ۴ ، ۸) است.
۵- مقدار دهی چندگانه ی پیشرفته تر
مقدار دهی چند گانه ی معمولی همه چیزی نیست که پایتون می تواند انجام دهد. شما به عناصر و مقادیر یکسان در سمت چپ و راست احتیاج ندارید:
>>> x, *y, z = 2, 4, 8, 16
>>> x
۲
>>> y
[۴, ۸] >>> z
۱۶
در این حالت، x مقدار اول (۲) را بدست می آورد زیرا اول می آید. z آخرین است و آخرین مقدار (۸) را می گیرد. y همه مقادیر دیگر را در یک لیست می گیرد زیرا دارای ستاره (*y) است.
۶- تعویض متغیرها
می توانید مقدار دهی چند گانه برای تعویض هر دو متغیر به صورت مختصر و ظریف و بدون معرفی متغیر سوم استفاده کنید:
>>> x, y = 2, 8
>>> x
۲
>>> y
۸
>>> x, y = y, x
>>> x
۸
>>> y
۲
۷- ادغام واژگان
یکی از راه های ادغام دو یا چند فرهنگ لغت این است که آن ها را در یک فرهنگ لغت جدید باز کنید:
>>> x = {‘u’: 1}
>>> y = {‘v’: 2}
>>> z = {**x, **y, ‘w’: 4}
>>> z
{‘u’: 1, ‘v’: 2, ‘w’: 4}
۸- اتصال رشته ها
اگر نیاز به اتصال چندین رشته دارید، در نهایت با داشتن همان کاراکتر یا گروه کاراکترهای بین آن ها، می توانید از روش ()str.join استفاده کنید:
>>> x = [‘u’, ‘v’, ‘w’] >>> y = ‘-*-‘.join(x)
>>> y
‘u-*-v-*-w’
۹- تکرار پیشرفته
اگر می خواهید حلقه ای در دنباله داشته باشید و به هر دو عنصر دنباله و شاخص های مربوطه احتیاج دارید، باید از enumerate استفاده کنید:
>>> for i, item in enumerate([‘u’, ‘v’, ‘w’]):
… print(‘index:’, i, ‘element:’, item)
…
index: 0 element: u
index: 1 element: v
index: 2 element: w
در هر تکرار، یک index و عنصر مربوطه دنباله را دریافت خواهید کرد.
حتما بخوانید: ۱۱ نکته مفید برای یادگیری برنامه نویسی پایتون (برای مبتدیان)
۱۰- تکرار معکوس
اگر می خواهید حلقه ای معکوس در دنباله داشته باشید، باید از reversed استفاده کنید:
>>> for item in reversed([‘u’, ‘v’, ‘w’]):
… print(item)
…
w
v
u
۱۱- جمع عناصر
اگر قصد دارید عناصر را از چندین دنباله جمع کنید، باید از zip استفاده کنید:
>>> x = [1, 2, 4] >>> y = (‘u’, ‘v’, ‘w’)
>>> z = zip(x, y)
>>> z
<zip object at 0x7f9e98df3148>
>>> list(z)
[(۱, ‘u’), (2, ‘v’), (4, ‘w’)]
می توانید از طریق شی به دست آمده zip آن را تکرار کنید یا آن را به یک لیست یا یک tuple تبدیل کنید.
۱۲- پیوند ماتریس ها
اگرچه افراد معمولاً هنگام کار با ماتریس، از NumPy (یا کتابخانه های مشابه) استفاده می کنند، می توانید پیوند ماتریس را با zip دریافت کنید:
>>> x = [(1, 2, 4), (‘u’, ‘v’, ‘w’)] >>> y = zip(*x)
>>> z = list(y)
>>> z
[(۱, ‘u’), (2, ‘v’), (4, ‘w’)]
۱۳- مقادیر واحد
اگر ترتیب عناصر مهم نیست، می توانید نسخه های تکراری را از لیست حذف کنید، که با تبدیل آن به یک set، مقادیر منحصر به فردی بدست می آید:
>>> x = [1, 2, 1, 4, 8] >>> y = set(x)
>>> y
{۸, ۱, ۲, ۴}
>>> z = list(y)
>>> z
[۸, ۱, ۲, ۴]
۱۴- مرتب سازی دنباله ها
دنباله ها توسط عناصر اول آن ها به طور پیش فرض طبقه بندی می شوند:
>>> x = (1, ‘v’)
>>> y = (4, ‘u’)
>>> z = (2, ‘w’)
>>> sorted([x, y, z])
[(۱, ‘v’), (2, ‘w’), (4, ‘u’)]
با این حال، اگر می خواهید آن ها را با توجه به عناصر دوم (یا سایر) مرتب کنید، می توانید از پارامتر key و یک تابع مناسب lambda به عنوان آرگومان مربوطه استفاده کنید:
>>> sorted([x, y, z], key=lambda item: item[1])
[(۴, ‘u’), (1, ‘v’), (2, ‘w’)]
اگر می خواهید ترتیب معکوس را بدست آورید ، مانند زیر عمل کنید:
>>> sorted([x, y, z], key=lambda item: item[1], reverse=True)
[(۲, ‘w’), (1, ‘v’), (4, ‘u’)]
۱۵- مرتب کردن فرهنگ لغات
می توانید از یک رویکرد مشابه برای مرتب کردن برچسب های key – value فرهنگ لغات به دست آمده با متد ()items استفاده کنید:
>>> x = {‘u’: 4, ‘w’: 2, ‘v’: 1}
>>> sorted(x.items())
[(‘u’, 4), (‘v’, 1), (‘w’, 2)]
آن ها براساس کلیدها طبقه بندی می شوند. اگر می خواهید آن ها را با توجه به مقادیرشان طبقه بندی کنید، باید آرگومان های مربوط به کلید را مشخص کنید و در نهایت برعکس کنید:
>>> sorted(x.items(), key=lambda item: item[1])
[(‘v’, 1), (‘w’, 2), (‘u’, 4)] >>> sorted(x.items(), key=lambda item: item[1], reverse=True)
[(‘u’, 4), (‘w’, 2), (‘v’, 1)]
۱۶- رشته های خام فرمت شده
PEP 498 و Python 3.6 رشته های به اصطلاح فرمت شده یا f-string را معرفی کردند. می توانید عبارات را در چنین رشته هایی جاسازی کنید. شما باید هر دو پیشوند را درج کنید: fr.
>>> fr’u n v w={2 + 8}’
‘u \ n v w=10’
۱۷- به دست آوردن تاریخ و زمان فعلی
پایتون دارای یک ماژول داخلی datetime است که در کار با تاریخ و زمان همه کاره است. یکی از متد های آن، .()now ، تاریخ و زمان فعلی را برمی گرداند:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 5, 20, 1, 12, 31, 230217)
این نتیجه مطابق با ۲۰-May-2019 در ساعت ۰۱:۱۲:۳۱ AM است.
۱۸- استفاده از Index بزرگ ترین عنصر (یا کوچک ترین عنصر)
پایتون روالی ارائه نمی دهد تا مستقیماً index بزرگ ترین یا کوچک ترین عنصر را در یک لیست یا تاپل بدست آورید. خوشبختانه، (حداقل) دو روش خوب برای این کار وجود دارد:
>>> x = [2, 1, 4, 16, 8] >>> max((item, i) for i, item in enumerate(x))[1] ۳
اگر دو یا چند عنصر با حداکثر مقدار وجود داشته باشد، این روش index آخرین آیتم را برمی گرداند:
>>> y = [2, 1, 4, 8, 8] >>> max((item, i) for i, item in enumerate(y))[1] ۴
برای به دست آوردن index اولین مورد، باید عبارت قبلی را کمی تغییر دهید:
>>> -max((item, -i) for i, item in enumerate(y))[1] ۳
روش جایگزین احتمالاً ظریف تر است:
>>> x = [2, 1, 4, 16, 8] >>> max(range(len(x)), key=lambda i: x[i])
۳
>>> y = [2, 1, 4, 8, 8] >>> max(range(len(y)), key=lambda i: x[i])
۳
برای یافتن index کوچک ترین عنصر، از تابع min به جای max استفاده کنید.
۱۹- به دست آوردن حاصل ضرب کارتزین
itertools ماژول داخلی کلاس های بالقوه مفیدی را ارائه می دهد. یکی از آن ها product است که برای به دست آوردن حاصل ضرب کارتزین مورد استفاده قرار می گیرد:
>>> import itertools
>>> x, y, z = (2, 8), [‘u’, ‘v’, ‘w’], {True, False}
>>> list(itertools.product(x, y, z))
[(۲, ‘u’, False), (2, ‘u’, True), (2, ‘v’, False), (2, ‘v’, True),
(۲, ‘w’, False), (2, ‘w’, True), (8, ‘u’, False), (8, ‘u’, True),
(۸, ‘v’, False), (8, ‘v’, True), (8, ‘w’, False), (8, ‘w’, True)]
۲۰- اپراتور ضرب ماتریس
PEP 465 و Python 3.5 اپراتور اختصاصی infix را برای ضرب ماتریس معرفی کردند@. شما می توانید آن را برای کلاس خود با متد های __matmul__, __rmatmul__, __imatmul__ پیاده سازی کنید. به این ترتیب کد برای ضرب بردار یا ماتریس بسیار زیبا است:
>>> import numpy as np
>>> x, y = np.array([1, 3, 5]), np.array([2, 4, 6])
>>> z = x @ y
>>> z
۴۴
نتیجه
شما ۲۰ نکته و ترفند مفید پایتون را مشاهده کردید که پایتون را جالب و زیبا جلوه می دهند. بسیاری ویژگی دیگر نیز وجود دارد که ارزش کاوش را دارند. کد نویسی مبارک!