Loading…

جزیره برنامه نویسی و توسعه نرم افزار

ارسال کننده: حسین احمدی
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...
ارسال پیام خصوصی
امتیازات این مطلب
نکته: آموزش زبان پایتون :: قسمت هفدهم - Closure ها
در قسمت قبلی که در مورد توابع صحبت کردیم، با حالتی آشنا شدیم که یک تابع را داخل یک تابع دیگر تعریف می کردیم:

>>> def func1():
...     def func2():
...         print("Welcome to ITPro.ir")
...     func2()
...
>>> func1()
Welcome to ITPro.ir

تابع func2 در بدنه func1 که در آن تعریف شده قابل دسترس است. همچنین func2 امکان دسترسی به متغیرهای تعریف شده در بدنه خودش و بدنه func1 را دارد بعلاوه پارامتر های func1. در صورتی که func2 از پارامتر تعریف شده در func1 استفاده کند، یعنی در حال استفاده از متغیری است که خارج از scope یا بدنه خودش است. به مثال زیر دقت کنید:

>>> def func1(msg):
...     def func2():
...         print(msg)
...     func2()
...
>>> func1("Welcome to ITPro.ir")
Welcome to ITPro.ir

اما شرایط را کمی تغییر می دهیم، فرض کنید که تابع func1 به جای فراخوانی func2، آن را با دستور return بر گرداند:

>>> def func1(msg):
...     def func2():
...         print(msg)
...     return func2
...
>>> caller = func1("Welcome to ITPro.ir")
>>> caller()
Welcome to ITPro.ir

در کد بالا تابع func1 با مقدار Welcome to ITPro.ir فراخوانی شد و خروجی آن که یک تابع است داخل متغیری به نام caller قرار گرفت. در قدم بعدی با فراخوانی caller که اشاره به تابع داخلی func2 دارد مقدار مشخص شده در خروجی چاپ می شود. در زبان پایتون، زمانی که روند اجرای کد از scope یک تابع خارج می شود کلیه پارامتر ها و متغیرهای داخل آن scope نیز از بین می روند، اما func2 هنوز مقدار msg را در اختیار دارد. در زبان پایتون کاری که در کد بالا انجام شد Closure نام دارد. با استفاده از Closure ها، حتی در صورتی که تابع func1 را با عبارت del حذف کنیم، کماکان caller را می توان فراخوانی کرد:

>>> del func1
>>> caller()
Welcome to ITPro.ir

در مثال زیر یک نمونه از کاربردهای استفاده از Closure ها را مشاهده می کنید:

>>> def mul(x):
...     def inner_mul(y):
...         return x*y
...     return inner_mul
...
>>> mul2=mul(2)
>>> mul2(4)
8
>>> mul3=mul(3)
>>> mul3(7)
21
>>> mul2(4)
8
>>> mul3(9)
27

در قسمت بعدی با توابع بازگشتی (Recursive Function) در زبان پایتون آشنا خواهیم شد. ITpro باشید

نویسنده: حسین احمدی
منبع: ITpro
سایر مطالب این گروه
دیدگاه ها

هیچ دیدگاهی برای این مطلب ارسال نشده است

برای ارسال نظر وارد شوید.

Countdown