دکوریتورها در پایتون | Decorators in python - قسمت اول
در دنیای برنامه نویسی پایتون، دکوراتورها می توانند ابزاری زیبا و قدرتمند در دست توسعه دهندگان با تجربه باشند.
دکوراتورها به شما این توانایی را می دهند که رفتار توابع را بدون تغییر کد منبع آنها تغییر دهید و روشی مختصر و انعطاف پذیر برای افزایش و گسترش عملکرد آنها ارائه می دهد.
در این مقاله، من به پیچیدگیهای نحوه استفاده از دکوراتورها در پایتون میپردازم و نمونههایی از کاربرد آنها را نشان میدهم.
به زبان ساده، تابع راهی برای اجرای مکرر یک بلوک کد با آرگومان های مختلف است.
به عبارت دیگر، میتواند ورودیها را بگیرد، از آن ورودیها برای اجرای مجموعهای از کدهای از پیش تعریفشده استفاده کند و سپس یک خروجی را برگرداند.
توابع ورودی ها را می گیرند، از آن برای اجرای مجموعه ای از کدها استفاده می کنند و یک خروجی را برمی گرداند
در پایتون یک تابع به صورت زیر نوشته می شود:
def add_one(num): return num + 1
وقتی میخواهیم آن را فراخوانی کنیم، میتوانیم نام تابع را با پرانتز بنویسیم و ورودیهای لازم (آگومانها) را وارد کنیم:
final_value = add_one(1) print(final_value) # 2
توجه داشته باشید که در بیشتر موارد، آرگومان ها و پارامترها به یک معنا هستند. آنها متغیرهای مورد استفاده در تابع هستند.
تفاوت در جایی است که ما به آنها اشاره می کنیم. آرگومان ها چیزی هستند که هنگام فراخوانی تابع به آن منتقل می کنیم و پارامترها چیزی هستند که در تابع اعلام می شوند.
نحوه پاس دادن توابع به عنوان آرگومان
معمولاً هنگام فراخوانی توابع با آرگومانها، مقادیری مانند اعداد صحیح، شناورها، رشتهها، فهرستها، دیکشنریها و دیگر انواع دادهها را ارسال میکنیم.
اما، کاری که می توانیم انجام دهیم این است که یک تابع را نیز به عنوان آرگومان ارسال کنیم:
def inner_function(): print("inner_function is called") def outer_function(func): print("outer_function is called") func() outer_function(inner_function) # outer_function is called # inner_function is called
در این مثال ما دو تابع ایجاد می کنیم: inner_function و outer_function.
outer_function یک پارامتر به نام func دارد که پس از فراخوانی خود آن را فراخوانی می کند.
_outerfunction ابتدا اجرا می شود. سپس تابعی را که به عنوان پارامتر ارسال شده است فراخوانی می کند
در مورد آن فکر کنید که چگونه می توانیم با توابع مانند هر مقدار یا متغیر دیگری رفتار کنیم.
اصطلاح مناسب برای این است که توابع شهروندان درجه یک هستند. این بدان معنی است که آنها دقیقاً مانند هر شی دیگری هستند و می توانند به عنوان آرگومان به توابع دیگر منتقل شوند، به متغیرها اختصاص داده شوند یا توسط توابع دیگر برگردانده شوند.
بنابراین، outer_function می تواند یک تابع را به عنوان یک پارامتر دریافت کند و هنگام اجرا آن را فراخوانی کند.
نحوه برگرداندن توابع
یکی دیگر از مزایای استفاده از توابع به عنوان اشیاء این است که می توانیم آنها را در توابع دیگر تعریف کرده و آنها را نیز برگردانیم:
def outer_function(): print("outer_function is called") def inner_function(): print("inner_function is called") return inner_function