اشیا پایتون می توانند مانند توابع رفتار کنند
در حالی که همه توابع در پایتون اشیاء هستند، عکس آن درست نیست. اشیاء توابع نیستند. اما می توان آنها را قابل فراخوانی کرد که این امکان را فراهم می کند
در بسیاری از موارد با آنها مانند عملکرد رفتار کنید.
اگر یک شی قابل فراخوانی باشد به این معنی است که می توانید از پرانتزهای گرد استفاده کنید
دستور فراخوانی تابع بر روی آن و حتی ارسال آرگومان های فراخوانی تابع.
همه اینها با روش call dunder ارائه می شود. در اینجا مثالی از کلاس وجود دارد که یک شی قابل فراخوان را تعریف می کند:
class Adder:
def init(self, n):
self.n = n
def call(self, x):
return self.n + x
plus_3 = Adder(3)
plus_3(4)
7
در پشت صحنه، “تماس” یک نمونه شی به عنوان یک تابع تلاش می کند
برای اجرای متد call شی.
البته همه اشیا قابل فراخوانی نخواهند بود. به همین دلیل است که یک داخلی وجود دارد
تابع فراخوانی برای بررسی اینکه آیا یک شی به نظر قابل فراخوانی است یا خیر
یا نه:
callable(plus_3)
True
callable(yell)
True
callable(‘hello’)
False
لامبداها تک بیانی هستند
کارکرد
کلمه کلیدی لامبدا در پایتون یک میانبر برای اعلان فراهم می کند
توابع ناشناس کوچک توابع لامبدا دقیقاً مانند رفتار می کنند
توابع منظم با کلمه کلیدی def اعلام شده است. می توان از آنها استفاده کرد
هر زمان که اشیاء تابع مورد نیاز است.
برای مثال، به این صورت است که یک تابع لامبدا ساده را با انجام یک اضافه تعریف میکنید:
add = lambda x, y: x + y
add(5, 3)
8
شما می توانید همان تابع add را با کلمه کلیدی def اعلام کنید، اما آن را
کمی پرمخاطب تر خواهد بود:
def add(x, y):
… return x + y
add(5, 3)
8
اکنون ممکن است از خود بپرسید: «چرا سر و صدای زیاد در مورد لامبداها؟ اگر
آنها فقط یک نسخه مختصرتر از اعلام توابع با هستند
دف، مشکل بزرگ چیست؟»
به مثال زیر نگاهی بیندازید و در حین انجام این کار، کلمات تابع را در ذهن خود نگه دارید:
(lambda x, y: x + y)(5, 3)
8
باشه اینجا چی شد من فقط از لامبدا برای تعریف تابع “افزودن” درون خطی استفاده کردم و بلافاصله آن را با آرگومان های 5 و
3.
از نظر مفهومی، عبارت لامبدا lambda x، y: x + y است
مانند اعلان یک تابع با def، اما فقط به صورت درون خطی نوشته شده است. را
تفاوت اصلی در اینجا این است که من مجبور نیستم شی تابع را به آن متصل کنم
یک نام قبل از استفاده از آن من فقط عبارتی را که می خواستم بیان کردم
را به عنوان بخشی از یک لامبدا محاسبه کنید، و سپس بلافاصله آن را توسط ارزیابی کنید
فراخوانی عبارت لامبدا مانند یک تابع منظم.
قبل از حرکت، ممکن است بخواهید با کد قبلی بازی کنید
برای مثال کمی که واقعاً اجازه دهید معنای آن در درون من غرق شود. من هنوز به یاد دارم
این مدتی طول می کشد تا سرم را دور خودم بپیچم. پس نگران نباشید
صرف چند دقیقه در یک جلسه مترجم در این مورد. ارزش خواهد داشت
آی تی.
تفاوت نحوی دیگری بین لامبدا و معمولی وجود دارد
تعاریف تابع توابع لامبدا به یک واحد محدود می شوند
اصطلاح. این بدان معنی است که یک تابع لامبدا نمی تواند از دستورات یا استفاده کند
حاشیه نویسی – نه حتی یک بیانیه بازگشت.
چگونه مقادیر را از لامبدا برمی گردانید؟ اجرای لامبدا
تابع بیان خود را ارزیابی می کند و سپس به طور خودکار برمی گردد
نتیجه عبارت است، بنابراین همیشه یک حالت بازگشت ضمنی وجود دارد. به همین دلیل است که برخی افراد لامبدا را به عنوان یک عبارت واحد می نامند
کارکرد.
قوانین ارسال دیدگاه در سایت