درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    اطلاعات دوره آموزشی
    اطلاعات مطلب
      مدرس/نویسنده
      حسین احمدی
      امتیاز: 464785
      رتبه:3
      340
      253
      402
      2670
      حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر
      دوره های مرتبط
      دوره های توسینسو دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 17 قسط خریداری کنید
      با خرید این دوره مبلغ 5,445 تومان هدیه بگیرید
      دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 11 قسط خریداری کنید
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 17 قسط خریداری کنید
      با خرید این دوره مبلغ 8,470 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      مدرس: ایمان جوادی
      این دوره را در 13 قسط خریداری کنید
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      مدرس: مهدی عادلی فر
      این دوره را در 2 قسط خریداری کنید
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      مدرس: امیر حسین فضلیخانی
      این دوره را در 12 قسط خریداری کنید
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 27 قسط خریداری کنید
      با خرید این دوره مبلغ 8,110 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
      دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 23 قسط خریداری کنید
      با خرید این دوره مبلغ 7,425 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 78 قسط خریداری کنید
      با خرید این دوره مبلغ 82,245 تومان هدیه بگیرید
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      مدرس: کاظم تقندیکی
      این دوره را در 20 قسط خریداری کنید
      با خرید این دوره مبلغ 7,040 تومان هدیه بگیرید
      دوره آموزشی ساخت ربات تلگرام
      دوره آموزشی ساخت ربات تلگرام
      مدرس: کاظم تقندیکی
      این دوره را در 8 قسط خریداری کنید
      دوره آموزشی طراحی رابط کاربری با JavaFX
      دوره آموزشی طراحی رابط کاربری با JavaFX
      مدرس: حسام رسولیان
      این دوره را در 13 قسط خریداری کنید
      دوره آموزشی Exploit نویسی به زبان Perl
      دوره آموزشی Exploit نویسی به زبان Perl
      مدرس: ایمان جوادی
      این دوره را در 7 قسط خریداری کنید
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      مدرس: کاظم تقندیکی
      این دوره را در 11 قسط خریداری کنید

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

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

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

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

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

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

        arrow