برنامه نویسی تابع گرا یا functional programming
برنامه نویسی تابع گرا یک سبک برنامه نویسی است که بر اساس توابع است. بخش کلیدی برنامه نویسی تابع گرا در پایتون، توابع مرتبه بالاتر است. ما این ایده را به طور خلاصه در درس قبلی در مورد توابع به عنوان اشیا دیده ایم. توابع مرتبه بالاتر، توابع دیگر را به عنوان آرگومان دریافت می کنند، و یا آنها را به عنوان نتایج به ارمغان می آورند. مثال:
def apply_twice(func, arg):
return func(func(arg))
def add_five(x):
return x + 5
print(apply_twice(add_five, 10))
خروجی:
>>>
20
>>>
نکته:تابع apply_twice عمل دیگری را به عنوان استدلال آن انجام می دهد و آن را دو بار در داخل بدنه کد خود فرا خوانی می کند.
توابع خالص و ناخالص (pure and impure functions)
برنامه نویسی کاربردی به دنبال استفاده از توابع خالص است. توابع خالص عوارض جانبی ندارند و مقداری را که فقط به استدلال آنها بستگی دارد، بازمی گرداند. این کار در ریاضی به این صورت عمل می کند: به عنوان مثال، cos (x)، برای همان مقدار x، همیشه همان نتیجه را به دست می آورد. در زیر نمونه هایی از توابع خالص و ناخالص هستند. عملکرد خالص:
def pure_function(x, y):
temp = x + 2*y
return temp / (2*x + y)
عملکرد ناخالص:
some_list = []
def impure(arg):
some_list.append(arg)
نکته:تابع بالا خالص نیست، زیرا حالت some_list را تغییر داد. استفاده از توابع خالص هم مزایا و هم معایب دارد. توابع خالص عبارتند از: - ساده تر در شفاف سازی و تست کردن - کارآمدتر. هنگامی که عملکرد برای یک ورودی ارزیابی می شود، نتیجه می تواند ذخیره شود و به دفعه بعد که عملکرد آن ورودی مورد نیاز است، نسبت دهد تا تعداد دفعاتی که تابع فراخوانی می شود کاهش یابد. به این مدل memoization یا به اصطلاح یادداشت برداری می گویند. - راحت تر به صورت parallel یا موازی اجرا شود. نکته:معایب اصلی استفاده از تنها توابع خالص این است که آنها وظیفه ساده و آسان I / O را به شدت پیچیده می کنند، زیرا به نظر می رسد به طور ذاتی نیاز به عوارض جانبی دارد. همچنین می توانند در بعضی موقعیت ها دشوار باشند.