برنامه نویسی ۴۶۸ بازدید

زبان برنامه‌نویسی پایتون اینک از هر زمان دیگری محبوبیت بیشتری دارد و افراد به تدریج متوجه می‌شوند که پایتون یک زبان بسیار قدرتمند و با یادگیری آسان است. در این مقاله برخی ترفندهای مهم پایتون که باید بدانید را با هم مرور می‌کنیم.

دستکاری رشته

پایتون به خوبی می‌تواند تشخیص دهد که شما می‌خواهید با استفاده از عملگرهای ریاضیاتی مانند + و * چه کاری روی رشته‌ها انجام دهید:

>>> my_string = "Hi Medium..!"
>>> print(my_string * 2)
Hi Medium..!Hi Medium..!
>>> print(my_string + " I love Python" * 2)
Hi Medium..! I love Python I love Python

با استفاده از [1-::] می‌توانیم یک رشته را به صورت معکوس نیز در بیاوریم و این امکان محدود به رشته‌ها هم نیست:

>>> print(my_string[::-1])
!..muideM iH
>>> my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]

در مورد لیستی از کلمات می‌توانیم، آن‌ها را نیز به صورت معکوس در بیاوریم:

>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!

در کد فوق از متد ()join برای الحاق همه عناصر در لیست معکوس شده با ‘ ‘ یعنی فاصله استفاده کرده‌ایم و یک علامت تعجب نیز اضافه می‌کنیم.

خلاصه لیست

ترفندهای مهم پایتون

«خلاصه لیست» (List Comprehensions) یک ابزار بسیار مهم در پایتون محسوب می‌شود و یک روش قدرتمند، شهودی و خوانا برای اجرای عملیات سریع روی یک لیست ارائه می‌کند. فرض کنید یک تابع تصادفی برای مربع کردن اعداد و افزودن عدد 5 به آن‌ها داریم:

>>> def stupid_func(x):
>>>     return x**2 + 5

اینک فرض کنید می‌خواهیم این تابع را روی همه اعداد فرد اعمال کنیم. در صورتی که با خلاصه لیست آشنا نباشیم، احتمالاً به روش زیر عمل خواهیم کرد:

>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>>     if x % 2 != 0:
>>>         new_list.append(stupid_func(x))
>>> print(new_list)
[6, 14, 30]

اما یک روش آسان‌تر نیز وجود دارد:

>>> my_list = [1, 2, 3, 4, 5]
>>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]

خلاصه لیست با ساختار زیر کار می‌کنند:

[expression for item in list]

و اگر فکر می‌کنید استفاده از یک شرط بولی اضافی مانند شرط فرد بودن فوق اشکالی ایجاد نمی‌کند:

[expression for item in list if conditional]

دستور زیر دقیقاً همان کار قبلی را انجام می‌دهد:

>>> for item in list:
>>>     if conditional:
>>>         expression

این کد را می‌توانیم از این هم بهتر بنویسیم، زیرا عملاً نیازی به آن stupid_func نداریم:

>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
[6, 14, 30]

لامبدا و Map

ترفندهای مهم پایتون

لامبدا

لامبدا کمی عجیب است، اما مانند بقیه مواردی که در این مقاله معرفی کردیم، ابزاری کاملاً قدرتمند است و زمانی که با طرز کار آن آشنا شوید، برایتان بسیار آسان خواهد بود. تابع لامبدا اساساً یک تابع بی‌نام کوچک است. دلیل بی‌نام بودن این است که لامبداها در اغلب موارد برای اجرای عملیات کوچک و ساده استفاده می‌شوند که نیازمند تعریف تابعی به صورت زیر نیست:

def my_function()

مثال فوق در مورد مربع کردن اعداد و افزودن عدد 5 را مجدداً بررسی می‌کنیم. در آنجا یک تعریف تابع رسمی به صورت زیر انجام دادیم:

def stupid_func(x)

اینک آن را با تابع لامبدا بازسازی می‌کنیم:

>>> stupid_func = (lambda x : x ** 2 + 5)
>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]

شاید بپرسید چرا باید از این ساختار عجیب استفاده کنیم؟ دلیل آن این است که این ساختار در مواردی که بخواهیم عملیات ساده‌ای را بدون تعریف یک تابع واقعی انجام می‌دهیم، مفید خواهد بود. برای نمونه فرض کنید لیستی از اعداد دارید و می‌خواهید آن را در پایتون مرتب‌سازی کنید. یک روش برای انجام این کار استفاده از متد sort()‎ است:

>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]

این کد کار می‌کند، اما فرض کنید بخواهیم بر اساس کوچک‌ترین اعداد مربعی آن را مرتب‌سازی کنیم. در این حالت باید از یک تابع لامبدا استفاده کنیم تا key را تعریف کنیم. این همان چیزی است که متد ()sorted برای تعیین شیوه مرتب‌سازی مورد استفاده قرار می‌دهد:

>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]

Map

Map تابعی است که برای اعمال یک تابع روی دنباله‌ای از عناصر مانند یک لیست استفاده می‌شود. فرض کنید می‌خواهیم هر عنصر را در یک لیست در عنصر متناظر در لیست دیگر ضرب کنیم، برای انجام این کار از یک تابع لامبدا و map استفاده می‌کنیم:

>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
[4, 10, 18]

ساختار فوق در مقایسه با ساختار زیر ساده و خوانا است:

>>> x, y = [1, 2, 3], [4, 5, 6]
>>> z = []
>>> for i in range(len(x)):
>>>     z.append(x[i] * y[i])
>>> print(z)
[4, 10, 18]

دستورهای تک‌خطی if ،elif و else

ترفندهای مهم پایتون

حتماً تاکنون در جایی در کدهایتان با حالتی شبیه کد زیر مواجه شده‌اید:

>>> x = int(input())
>>> if x >= 10:
>>>     print("Horse")
>>> elif 1 < x < 10:
>>>     print("Duck")
>>> else:
>>>     print("Baguette")

زمانی که این کد را اجرا کنید، از شما خواسته می‌شود که یک ورودی برای تابع ()input وارد کنید، فرض کنید عدد 5 را وارد می‌کنیم و در پاسخ Duck را دریافت می‌نماییم. اما می‌توانیم این کد را به صورت زیر در یک خط نیز بنویسیم:

print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")

چنان که می‌بینید این ساختار بسیار ساده‌تر است. در زمان کدنویسی موارد زیادی وجود دارند که می‌توان گزاره‌های شرطی if/else را به صورت دستورهای تک‌خطی ساده‌سازی کرد.

()zip

ترفندهای مهم پایتون

اگر مثالی که در بخش معرفی ()map مطرح کردیم و در آن چیزی را به صورت موازی بین دو لیست اعمال کردیم به خاطر داشته باشید، در این بخش از ()zip استفاده می‌کنیم تا آن ساختار را هر چه بیشتر ساده کنیم. فرض کنید دو لیست داریم که یکی شامل نام‌ها و دیگر شامل نام‌های خانوادگی است. برای این که آن‌ها را به صورت مرتب به شکل یک لیست واحد از نام‌ها و نام‌های خانوادگی در بیاوریم، می‌توانیم از ()zip استفاده کنیم:

>>> first_names = ["Peter", "Christian", "Klaus"]
>>> last_names = ["Jensen", "Smith", "Nistrup"]
>>> print([' '.join(x) for x in zip(first_names, last_names)])
['Peter Jensen', 'Christian Smith', 'Klaus Nistrup']

تنها اشکال این است در کد فوق نام خانوادگی اول به نام اول تعلق دارد. آن را می‌توانیم به سادگی به صورت زیر اصلاح کنیم:

>>> print([' '.join(x) for x in zip(first_names, last_names[::-1])])
['Peter Nistrup', 'Christian Smith', 'Klaus Jensen']

در این مقاله برخی از ترفندهای مهم پایتون را با همدیگر مرور کردیم. امیدواریم این راهنما برای شما مفید بوده باشد.

اگر این نوشته برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«میثم لطفی» در رشته‌های ریاضیات کاربردی و مهندسی کامپیوتر به تحصیل پرداخته و شیفته فناوری است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار با مجله فرادرس همکاری دارد.