آموزش توابع بی نام  در پایتون ( Anonymous functions)

پایتون آریا پروژه

آموزش توابع بی نام  در پایتون ( Anonymous functions)

آرگومان پیش فرض آرگومانی است که در صورت مشخص نکردن مقداری در فراخوانی تابع برای آن، به صورت خودکار مقدار پیش فرض می پذیرد.

نمونه ی زیر نشان می دهد که مقداری برای آرگومان (age در فراخوانی تابع) تعریف نشده.

با این وجود تابع دوم مقدار ۵۰ را برای آن چاپ می کند:

#!/usr/bin/python

# Function definition is here

def printinfo( name, age = 35 ):

 “This prints a passed info into this function”

 print “Name: “, name

 print “Age “, age

 return;

# Now you can call printinfo function

printinfo( age=50, name=”miki” )

printinfo( name=”miki” )

نتیجه:

Name: miki

Age 50

Name: miki

Age 35

آرگومان های با طول متغیر در پایتون (Variable -length arguments)

گاهی لازم است یک تابع را با آرگومان های بیشتری نسبت به آنچه در زمان تعریف تابع مشخص کردید، پردازش و فراخوانی کنید.

این دست از آرگومان ها در اصطلاح آرگومان های با طول متغیر (variable length )خوانده می شوند.

برخلاف آرگومان های الزامی و پیش فرض، در تعریف تابع ذکر نمی شوند.

نحوه ی نگارش:

def functionname([formal_args,] *var_args_tuple ):

 “function_docstring”

 function_suite

 return [expression]

علامت (*) پیش از اسم متغیر (vartuple )که دارنده ی آرگومان های متغیر nonkeyword است درج می شود.

لازم به ذکر است که این tuple ،چنانچه به هنگام فراخوانی تابع (function call )هیچ آرگومان اضافی مشخص نشود، تهی باقی می ماند.

مثال:

#!/usr/bin/python

# Function definition is here

def printinfo( arg1, *vartuple ):

 “This prints a variable passed arguments”

 print “Output is: “

 print arg1

 for var in vartuple:

 print var

 return;

# Now you can call printinfo function

printinfo( 10 )

printinfo( 70, 60, 50 )

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

Output is:

۱۰

Output is:

۷۰

۶۰

۵۰

توابع بی نام  در پایتون ( Anonymous functions)

توابعی که به شیوه ی معمول و با درج کلیدواژه ی def تعریف نشده اند، توابع anonymous نام دارند.

برای ایجاد توابع anonymous ،بایستی از کلیدواژه ی lambda استفاده نمود.

.۱ توابعی که به شکل lambda تعریف شده اند، قادراند چندین آرگومان به عنوان ورودی بپذیرند.

اما فقط یک مقدار را در قالب عبارت به عنوان خروجی برمی گرداند.

همچنین نمی توانند چندین دستور یا عبارت درخود داشته باشند.

یک تابع anonymous نمی تواند به صورت مستقیم برای چاپ (print )فراخوانی شود، زیرا lambda به یک عبارت نیاز دارد.

توابع lambda دارای فضای نامی محلی ( local namespace )خود هستند  نمی توانند به متغیرهایی که در لیست پارامتر خود آورده نشده و نیز متغیرهایی که در فضای نامی سراسری هستند، دسترسی داشته باشند.

.۴ اگرچه بنظر می رسد که lambda ها، نسخه ی تک خطی از یک تابع هستند.

با این وجود معادل دستورات درون برنامه ای ( in- line statement)در زبان های C و ++C محسوب نمی شوند.

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

ساختار نگارشی در پایتون

سینتکس توابع lambda همان طور که در نمونه ی زیر مشاهده می کنید، شامل تنها یک خط می باشد:

lambda [arg1 [,arg2,…..argn]]:expression

در زیر نحوه ی عملکرد تابعی که به صورت lambda تعریف شده باشد، را مشاهده می کنید:

#!/usr/bin/python

# Function definition is here

sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function

print “Value of total : “, sum( 10, 20 )

print “Value of total : “, sum( 20, 20 )

نتیجه:

Value of total : 30

Value of total : 40

نویسنده:زهرا رستمی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *