توابع را می توان تودرتو کرد
شاید تعجب آور باشد که پایتون اجازه می دهد توابع در داخل تعریف شوند توابع دیگر اینها اغلب توابع تو در تو یا توابع درونی نامیده می شوند. در اینجا یک مثال است:def whisper(t): def speak(text): return t.lower() + ‘…’ >>> speak(‘Hello, World’) ‘hello, world…’حالا اینجا چه خبر است؟ هر بار که صحبت می کنید، a را تعریف می کند عملکرد داخلی جدید زمزمه می کند و بلافاصله پس از آن آن را فرا می خواند. من مغز در اینجا فقط کمی شروع به خارش می کند، اما در مجموع، این موضوع هنوز نسبتاً ساده است. با این حال، ضربه زننده این است – زمزمه در خارج از صحبت وجود ندارد:>>> whisper(‘Yo’) NameError: return whisper(text) “name ‘whisper’ is not defined” AttributeError: >>> speak.whisper “‘function’ object has no attribute ‘whisper'” اما اگر واقعاً بخواهید به آن تابع whisper تو در تو دسترسی داشته باشید چه میکنید از بیرون صحبت می کنند؟ خب، توابع اشیا هستند—شما می توانید آن را برگردانید به عنوان مثال، در اینجا یک تابع است که دو تابع داخلی را تعریف می کند. بسته به آرگومان ارسال شده به تابع سطح بالا، آن را انتخاب و برمی گرداند یکی از عملکردهای درونی برای تماس گیرنده:def get_speak_func(volume): تابع داخلی به تماس گیرنده تابع والد. return text.lower() + ‘…’ def whisper(text): def yell(text): if volume > 0.5: return text.upper() + ‘!’ return yell return whisperتوجه کنید که چگونه get_speak_func در واقع هیچ یک از درونی خود را صدا نمی کند توابع – به سادگی تابع داخلی مناسب را بر اساس انتخاب می کند آرگومان volume و سپس شی تابع را برمی گرداند:>>> get_speak_func(0.3) <function get_speak_func.<locals>.whisper at 0x10ae18> >>> get_speak_func(0.7) <function get_speak_func.<locals>.yell at 0x1008c8>البته، سپس می توانید ادامه دهید و تابع برگشتی را نیز فراخوانی کنید به طور مستقیم یا با اختصاص دادن آن به نام متغیر ابتدا:>>> speak_func = get_speak_func(0.7) >>> speak_func(‘Hello’) ‘HELLO!’بگذارید برای یک ثانیه در اینجا فرو برود… این بدان معناست که نه تنها می تواند کار کند رفتارها را از طریق استدلال بپذیرند اما می توانند رفتارها را نیز برگردانند. چقدر باحاله؟ میدونی چیه، اینجا همه چیز کم کم داره سردرگم میشه. من دارم میروم قبل از ادامه نوشتن، یک استراحت کوتاه قهوه داشته باشم (و پیشنهاد می کنم شما هم همین کار را بکنید).توابع می توانند حالت محلی را ضبط کنند else: شما فقط دیدید که چگونه توابع می توانند شامل توابع درونی باشند، و اینطور است حتی امکان برگرداندن این توابع داخلی (در غیر این صورت پنهان) وجود دارد اکنون بهتر است کمربند ایمنی خود را ببندید زیرا کمی دیوانه تر می شود هنوز – ما در آستانه ورود به قلمرو برنامه نویسی کاربردی حتی عمیق تر هستیم. (شما آن استراحت قهوه را داشتید، درست است؟) توابع نه تنها می توانند توابع دیگر، این توابع درونی را برگردانند همچنین می تواند برخی از حالت های تابع والد را ضبط کرده و با آن حمل کند آنها را خب این یعنی چی؟تابع والد
قوانین ارسال دیدگاه در سایت