۱- تابع lambda
یک تابع lambda یک تابع کوچک و ناشناس است – ناشناس به این معنا که در واقع نامی ندارد.
توابع پایتون معمولاً با استفاده از سبک def a_function_name تعریف میشوند، اما با توابع lambda ما اصلاً نامی برای آن نمیگذاریم. ما این کار را انجام میدهیم زیرا هدف از یک تابع lambda این است که یک نوع بیان ساده یا عملیات را بدون نیاز به تعریف کامل یک تابع انجام دهد.
یک تابع lambda میتواند هر تعداد آرگومان را بگیرد، اما همیشه باید فقط یک عبارت داشته باشد:
x = lambda a, b : a * b print(x(5, 6)) # prints '30' x = lambda a : a*3 + 3 print(x(3)) # prints '12'
ببینید که چقدر آسان است! کمی ریاضیات اولیه را بدون نیاز به تعریف یک تابع کامل انجام دادیم. این کار یکی از بسیاری از ویژگیهای پایتون است که استفاده از آن را در یک زبان برنامه نویسی ساده میکند.
۲- تابع Map
Map یک تابع پایتون داخلی است که برای اعمال یک تابع در دنبالهای از عناصر مانند لیست یا Dictionary استفاده میشود. این تابع یک روش بسیار تمیز و مهمتر از همه خواندن برای انجام چنین عملی است.
def square_it_func(a): return a * a x = map(square_it_func, [1, 4, 7]) print(x) # prints '[1, 16, 49]' def multiplier_func(a, b): return a * b x = map(multiplier_func, [1, 4, 7], [2, 5, 8]) print(x) # prints '[2, 20, 56]'
مثال بالا را بررسی کنید! ما میتوانیم تابع خود را در یک لیست واحد یا چند لیست اعمال کنیم. در حقیقت، میتوانید از Map با هر تابع پایتون که فکر میکنید استفاده کنید، به شرطی که با عناصر دنبالهای که بر روی آنها کار میکنید سازگار باشد.
۳- تابع Filter
تابع Filter کاملاً شبیه به تابع Map است زیرا یک تابع را در یک دنباله (لیست، Dictionary) اعمال می کند. تفاوت اصلی این است که فیلتر Filter فقط عناصری را که تابع اعمال شده به عنوان True برگردانده است، باز میگرداند.
برای توضیح به مثال زیر توجه کنید:
# Our numbers numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] # Function that filters out all numbers which are odd def filter_odd_numbers(num): if num % 2 == 0: return True else: return False filtered_numbers = filter(filter_odd_numbers, numbers) print(filtered_numbers) # filtered_numbers = [2, 4, 6, 8, 10, 12, 14]
ما نه تنها True یا False را برای هر عنصر لیست ارزیابی کردیم ، بلکه تابع فیلتر نیز اطمینان حاصل کرد که فقط عناصری را که با True مطابقت دارند باز میگرداند. برای انجام دو مرحله بررسی یک عبارت و ایجاد یک لیست بازگشت بسیار مناسب است.
۴- ماژول Itertools
ماژول Python Itertools مجموعهای از ابزارها برای مدیریت تکرار است. تکرار کننده یک نوع داده است که میتواند در حلقه for از جمله لیستها و Dictionary استفاده شود.
استفاده از توابع موجود در ماژول Itertools به شما امکان میدهد بسیاری از عملیات تکرار کننده را انجام دهید که معمولاً به توابع چند خطی و درک لیست پیچیده نیاز دارد. نمونه های زیر را برای یک تصویر فوق العاده از جادوی Itertools بررسی کنید!
from itertools import * # Easy joining of two lists into a list of tuples for i in izip([1, 2, 3], ['a', 'b', 'c']): print i # ('a', 1) # ('b', 2) # ('c', 3) # The count() function returns an interator that # produces consecutive integers, forever. This # one is great for adding indices next to your list # elements for readability and convenience for i in izip(count(1), ['Bob', 'Emily', 'Joe']): print i # (۱, 'Bob') # (۲, 'Emily') # (۳, 'Joe') # The dropwhile() function returns an iterator that returns # all the elements of the input which come after a certain # condition becomes false for the first time. def check_for_drop(x): print 'Checking: ', x return (x > 5) for i in dropwhile(should_drop, [2, 4, 6, 8, 10, 12]): print 'Result: ', i # Checking: 2 # Checking: 4 # Result: 6 # Result: 8 # Result: 10 # Result: 12 # The groupby() function is great for retrieving bunches # of iterator elements which are the same or have similar # properties a = sorted([1, 2, 1, 3, 2, 1, 2, 3, 4, 5]) for key, value in groupby(a): print(key, value), end=' ') # (۱, [۱, ۱, ۱]) # (۲, [۲, ۲, ۲]) # (۳, [۳, ۳]) # (۴, [۴]) # (۵, [۵])
۵- توابع Generator
توابع Generator به شما امکان میدهد تابعی را که شبیه یک تکرار کننده عمل میکند اعلام کنید، یعنی میتوان از آن در حلقه for استفاده کرد. این کار کد شما را بسیار ساده کرده و از نظر حافظه بسیار کارآمدتر از یک حلقه ساده است.
مثالی را در نظر بگیرید که میخواهیم همه اعداد را از ۱ تا ۱۰۰۰ جمع کنیم. قسمت اول کد زیر نشان میدهد که چگونه این کار را با استفاده از حلقه for انجام میدهید.
در نگاه اول همه چیز خوب و جالب است بشرطی لیست کوچک باشد، مثلاً طول آن ۱۰۰۰ باشد. مشکل زمانی بوجود میآید که بخواهید این کار را با یک لیست بزرگتر انجام دهید، مثلاً ۱ میلیارد. با حلقه for، آن لیست بزرگ در حافظه ایجاد قحطی خواهد کرد ( همه افراد RAM نامحدودی برای ذخیره چنین چیزی ندارند!) تابع range در پایتون همین کار را انجام میدهد، این لیست را در حافظه ایجاد میکند.
بخش ۲ کد خلاصه لیست اعداد را با استفاده از Generator پایتون را نشان میدهد. یک Generator عناصری را ایجاد میکند و آنها را فقط در صورت نیاز در حافظه ذخیره میکند، یعنی یک به یک. این بدان معناست که اگر مجبور شوید ۱ میلیارد عدد ایجاد کنید ، فقط آنها را یک به یک در حافظه ذخیره میکنید! تابع xrange در پایتون از Generator برای ایجاد لیست استفاده میکند.
اگر محدوده وسیعی دارید که میخواهید فهرستی برای آن تهیه کنید، از Generator یا تابع xrange استفاده کنید. این امر به ویژه در مورد سیستم حساس به حافظه مانند موبایها صادق است.
با این اوصاف، اگر میخواهید چندین بار لیست را تکرار کنید و به اندازه کافی کوچک باشد تا در حافظه جا بیفتد، بهتر است از حلقهها و عملکرد محدوده استفاده کنید. این به این دلیل است که Generator و xrange هر بار که به آنها دسترسی پیدا میکنید، ارزش لیست را ایجاد میکنند، در حالی که محدوده یک لیست ایستا است و اعداد صحیح از قبل برای دسترسی سریع در حافظه وجود دارد.
# (۱) Using a for loop numbers = list() for i in range(1000): numbers.append(i+1) total = sum(numbers) # (۲) Using a generator def generate_numbers(n): num = 0 while num < n: yield num num += 1 total = sum(generate_numbers(1000)) # (۳) range() vs xrange() total = sum(range(1000 + 1)) total = sum(xrange(1000 + 1))
شما عزیزان همچنین میتوانید آموزشهای متنوعی از جمله مقدمات برنامه نویسی پایتون – شروع کار با پایتون، آموزش نصب پکیج در پایتون Python – نصب کتابخانه در پایتون، فرصت های شغلی برنامه نویسی پایتون – معرفی ۱۰ شغل مهم و پردرآمد برنامه نویسی پایتون و آموزش برنامه نویسی اندروید با پایتون در ویندوز ۱۰ را از سایت پی استور مطالعه فرمایید.
یک پاسخ
میتونم برای برنامه نویسی از شما کمک بگیرم