
در پایتون، می توانید خود را بچرخانید for
حلقه ها در خطوط تک ردیف با استفاده از تفاهم ها.
این یک راهنمای جامع برای درک پایتون است.
پایتون از 4 نوع درک پشتیبانی می کند:
- فهرست تفاهم ها
- درک واژگان
- تفاهم ها را تنظیم کنید
- درک های زاینده
شما یاد خواهید گرفت که هر نوع درک در پایتون چگونه کار می کند و مزایا/معایب استفاده از درک در وهله اول چیست.
1. فهرست تفاهم ها
درک لیست با نحو همراه است:
output_list = [expression for var in input_list if condition]
جایی که if condition
قسمت اختیاری است
یک مثال
بیایید لیستی از اعداد ایجاد کنیم که همه اعداد منفی را کنار بگذاریم. ابتدا می توانید از a استفاده کنید for
چرخه برای حل این مشکل:
numbers = [4, -2, 7, -4, 19] new_nums = [] for num in numbers: if num > 0: new_nums.append(num) print(new_nums)
خروجی:
[4, 7, 19]
اما شما می توانید این کار را انجام دهید for
حلقه کوتاه تر با استفاده از درک لیست:
new_nums = [num for num in numbers if num > 0] print(new_nums)
خروجی:
[4, 7, 19]
2. درک واژگان
پایتون یک میانبر برای پیمایش دیکشنری ها دارد که به درک دیکشنری معروف است.
نحو برای درک فرهنگ لغت عبارت است از:
{ key:value for (key,value) in dict.items() if condition }
یک مثال
بیایید با استفاده از درک فرهنگ لغت، تمام مقادیر عددی یک فرهنگ لغت را مربع کنیم:
data = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} squared = {k:v*v for (k,v) in data.items()} print(squared)
خروجی:
{'a': 1, 'b': 4, 'c': 9, 'd': 16, 'e': 25}
3. تفاهم را تنظیم کنید
درک مجموعه ها مانند درک لیستی از مجموعه ها است.
نحو درک آرایه به صورت زیر است:
{ expression for var in input if condition }
یک مثال
بیایید یک لیست از اعداد ایجاد کنیم و همه اعداد زوج را از آن در یک مجموعه انتخاب کنیم:
numbers = [13, 21, 14, 24, 53, 62] filtered_nums = set() for num in numbers: if num % 2 == 0: filtered_nums.add(num) print(filtered_nums)
خروجی:
{24, 62, 14}
اما با استفاده از مجموعه ای از درک، می توانید این کار را در یک خط انجام دهید:
filtered_nums = {num for num in numbers if num % 2 == 0} print(filtered_nums)
خروجی:
{24, 62, 14}
4. درک زایشی
مولدها درک خود را حفظ می کنند. درک ژنراتور بهتر به عنوان شناخته شده است بیان ژنراتور.
مانند سایر درک ها، عبارت مولد یک نحو کوتاه شده برای حلقه for ارائه می دهد.
نحو عبارت مولد به صورت زیر است:
( expression for var in input if condition )
یک مثال
بیایید تمام اعداد زوج را از یک لیست مربع کنیم و همه شانس ها را حذف کنیم.
ابتدا می توانید از یک حلقه for برای انجام کار استفاده کنید:
def square_even(numbers): for number in numbers: if number % 2 == 0: yield(number * number) numbers = [1, 2, 3, 4, 5, 6] squared_numbers = square_even(numbers) for number in squared_numbers: print(number)
خروجی:
4 16 36
با یک عبارت مولد، می توانید فراموش کنید square_even()
و همین کار را با یک خط کد انجام دهید:
squared_numbers = (num * num for num in numbers if num % 2 == 0) for number in squared_numbers: print(number)
خروجی:
4 16 36
چه زمانی نباید از درک مطلب در پایتون استفاده کرد؟
اکنون چهار نوع درک در پایتون را یاد گرفته اید.
میتواند وسوسه انگیز باشد که حلقههای for تمام پروژههای خود را با عبارات جایگزین کنید. با این حال، قبل از انجام این کار، بیایید در مورد اینکه چه زمانی نباید از درک استفاده کنید، بحث کنیم.
به طور خلاصه، اگر کیفیت کد را قربانی می کند، از درک مطلب استفاده نکنید!
یک مثال خوب هنگام کار با حلقه های تو در تو است. اگر یک حلقه برای تو در تو به عنوان یک بسته بنویسید، می توانید خطوط کد را ذخیره کنید، اما ممکن است کیفیت کد کاهش یابد.
به عنوان مثال، یک آرایه اغلب به صورت لیستی از لیست ها در پایتون نمایش داده می شود. اگر می خواهید یک آرایه را مسطح کنید، می توانید از درک لیست استفاده کنید:
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ] flat_matrix = [num for row in matrix for num in row] print(flat_matrix)
خروجی:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
کد کوتاه است، اما ممکن است درک آنچه انجام می دهد چندان شهودی نباشد.
اگر به جای آن از یک حلقه for تو در تو استفاده کنید، کد قابل درک تر می شود:
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ] flat_matrix = [] for row in matrix: for num in row: flat_matrix.append(num) print(flat_matrix)
خروجی:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
درک در مقابل چرخه برای: بهره وری
در نهایت، بیایید اثربخشی درک مطلب را بررسی کنیم
به عنوان مثال، درک لیست حدود 10٪ سریعتر از حلقه for هنگام مربع کردن 1M اعداد صحیح است.
انجام یک تحلیل مقایسه ای مشابه برای درک مجموعه و واژگان نتایج تا حدودی مشابهی به همراه دارد: درک مطلب کمی بهتر عمل می کند.
(برای ژنراتورها، مقایسه یک عبارت مولد و یک حلقه for-+ yield
بی معنی است: هر دو تقریباً فوراً یک شی مولد را برمی گردانند. زمان برای محاسبه مقادیر صرف نمی شود زیرا ژنراتورها مقادیر را ذخیره نمی کنند.)
بیرون بردن: از درک برای ارائه استفاده نکنید. سود بهره وری در مقایسه با آسیب ناشی از درک طولانی و لفظی ناچیز است. هنگامی که کد شما را بدون از دست دادن کیفیت پاک می کند، درک مطلب را بنویسید.
نتیجه
مال خودت رو برگردون for
حلقه در خطوط تک با استفاده از درک.
پایتون از چهار درک از ساختارهای داده رایج پشتیبانی می کند:
- درک فهرست
- درک واژگان
- تفاهم ایجاد کنید
- درک ژنراتور
استفاده عاقلانه از درک مطلب می تواند کیفیت کد شما را بهبود بخشد. اما کورکورانه از درک ها استفاده نکنید. گاهی اوقات جایگزینی یک حلقه for تو در تو با حلقه for می تواند کد را کمتر قابل درک کند.
درک ها می توانند حلقه for را لغو کنند. با این حال، از درک برای اجرا استفاده نکنید. در عوض، کیفیت کد را در اولویت قرار دهید.
با تشکر برای خواندن. کد نویسی مبارک!