درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من

آموزش زبان پایتون :: قسمت هفدهم - Closure ها

0 نظرات
در قسمت قبلی که در مورد توابع صحبت کردیم، با حالتی آشنا شدیم که یک تابع را داخل یک تابع دیگر تعریف می کردیم:

>>> 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
ردیف عنوان قیمت
1 آموزش زبان پایتون :: قسمت اول - مقدمات و آشنایی اولیه با پایتون رایگان
2 آموزش زبان پایتون :: قسمت دوم - دانلود پایتون و نوشتن اولین برنامه رایگان
3 آموزش زبان پایتون :: قسمت سوم - آشنایی با ساختار اسکریپت های پایتون رایگان
4 آموزش زبان پایتون :: قسمت چهارم - نوع های داده در زبان پایتون رایگان
5 آموزش زبان پایتون :: قسمت پنجم - تبدیل نوع ها به یکدیگر رایگان
6 آموزش زبان پایتون :: قسمت ششم - عملگرها در پایتون رایگان
7 آموزش زبان پایتون :: قسمت هفتم - دستور if رایگان
8 آموزش زبان پایتون :: قسمت هشتم - حلقه ها رایگان
9 آموزش زبان پایتون :: قسمت نهم - نوع های عددی و توابع کار با اعداد رایگان
10 آموزش زبان پایتون :: قسمت دهم - کار با رشته ها و توابع مرتبط رایگان
11 آموزش زبان پایتون :: قسمت یازدهم - لیست ها رایگان
12 آموزش زبان پایتون :: قسمت دوازدهم - Tuple ها رایگان
13 آموزش زبان پایتون :: قسمت سیزدهم - دیکشنری ها (Dictionaries) رایگان
14 آموزش زبان پایتون :: قسمت چهاردهم - مجموعه ها (Sets) رایگان
15 آموزش زبان پایتون :: قسمت پانزدهم - تابع zip و پیمایش چند لیست به صورت همزمان رایگان
16 آموزش زبان پایتون :: قسمت پانزدهم - روش Comprehension برای ایجاد لیست ها، دیکشنری ها و مجموعه ها رایگان
17 آموزش زبان پایتون :: قسمت شانزدهم - توابع (Functions) رایگان
18 آموزش زبان پایتون :: قسمت هفدهم - Closure ها رایگان
19 آموزش زبان پایتون :: قسمت هجدهم - توابع بازگشتی (Recursive Functions) رایگان
20 آموزش زبان پایتون :: قسمت نوزدهم - ماژول ها (Modules) رایگان
21 آموزش زبان پایتون :: قسمت بیستم - پکیج ها (Packages) رایگان
22 برنامه نویسی شئ گرا در پایتون :: مقدمات و آشنایی با کلاس و شئ رایگان
نظرات
هیچ نظری ارسال نشده است

برای ارسال نظر ابتدا به سایت وارد شوید

arrow