توابع به عنوان شئ
در پایتون، توابع همانند سایر انواع دادهها، اشیایی هستند که میتوان آنها را به متغیرها نسبت داد، مقداردهی مجدد کرد و در بخشهای مختلف کد استفاده نمود. هنگامی که نام تابع را بدون پرانتز مینویسیم، تابع اجرا نمیشود بلکه به عنوان یک شئ در حافظه نگهداری میشود. این ویژگی باعث میشود بتوانیم توابع را به متغیرها اختصاص دهیم یا حتی به عنوان آرگومان به توابع دیگر ارسال کنیم. اما زمانی که نام تابع را همراه با پرانتز مینویسیم، تابع اجرا شده و نتیجه آن بازگردانده میشود.
def multiply(x, y):
return x * y
a = 4
b = 7
operation = multiply # تابع multiply به متغیر operation اختصاص داده میشود، اجرا نمیشود
print(operation(a, b)) # تابع از طریق متغیر operation اجرا شده و نتیجه چاپ میشود
خروجی:
>>>
28
>>>
مثلاً اگر بنویسیم print(multiply)
، پایتون اشارهگر به تابع را به عنوان یک شئ نشان میدهد و تابع اجرا نمیشود. اما در print(multiply(4, 7))
تابع اجرا شده و خروجی آن نمایش داده میشود.
print(multiply) # نمایش شئ تابع، بدون اجرا
print(multiply(4, 7)) # اجرای تابع و نمایش نتیجه
خروجی:
>>>
<function multiply at 0x7f8c3e1b3820>
28
>>>
نکته: این امکان به شما اجازه میدهد که توابع را مانند متغیرها مدیریت کنید و حتی آنها را به عنوان آرگومان به توابع دیگر ارسال نمایید.
def add(x, y):
return x + y
def do_twice(func, x, y):
return func(func(x, y), func(x, y))
a = 5
b = 10
print(do_twice(add, a, b))
خروجی:
>>>
30
>>>
در این مثال، تابع do_twice
یک تابع دیگر را به عنوان آرگومان دریافت کرده و از آن در بدنه خود استفاده میکند.