نکته :: آموزش زبان پایتون :: قسمت هفدهم - Closure ها
درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من

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

صدور مدرک تنها برای دوره هایی که به صورت کامل خریداری شده و قیمت آن ها بالای 100،000 تومان باشد انجام خواهد شد.

جشنواره تخفیف شگفت انگیز زمستانه توسینسو

تا سقف 70 درصد تخفیف + ترافیک نیم بها + پشتیبانی محصولات توسط اساتید + ارائه گواهینامه پایان دوره

تخفیف های وب سایت
همه تخفیف ها

عضویت در

کانال تلگرام

توسینسو

اطلاعات مطلب
مدرس/نویسنده
حسین احمدی
امتیاز: 213993
رتبه:3
342
258
412
2787
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر

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

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

>>> 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 باشید

نویسنده: حسین احمدی
منبع: جزیره برنامه نویسی وب سایت توسینسو
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است
برچسب ها
ردیف عنوان
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 برنامه نویسی شئ گرا در پایتون :: مقدمات و آشنایی با کلاس و شئ
دوره مجموعه کل دوره
مطالب مرتبط

در حال دریافت اطلاعات

نظرات
هیچ نظری ارسال نشده است

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