مبانی دکوراتور پایتون
حال، دکوراتورها واقعاً چه هستند؟ آنها دیگری را “تزیین” یا “پیچیدن” می کنند
به شما اجازه می دهد قبل و بعد از اجرای تابع پیچیده کد را اجرا کنید.
دکوراتورها به شما امکان می دهند بلوک های ساختمانی قابل استفاده مجدد را تعریف کنید که می توانند
تغییر یا گسترش رفتار سایر عملکردها. و به شما اجازه دادند
این کار را بدون تغییر دائمی خود تابع پیچیده انجام دهید.
رفتار تابع فقط زمانی تغییر می کند که تزئین شده باشد.
اجرای یک دکوراتور ساده چگونه می تواند باشد؟ که در
اصطلاحات اساسی، دکوراتور، فراخوانی است که یک فراخوان را به عنوان ورودی و
قابل فراخوان دیگری را برمی گرداند.
تابع زیر دارای این ویژگی است و می تواند در نظر گرفته شود
ساده ترین دکوراتوری که می توانید بنویسید:
def null_decorator(func):
return func
همانطور که می بینید، null_decorator یک قابلیت فراخوانی است (این یک تابع است)، که طول می کشد
قابل فراخوان دیگری به عنوان ورودی آن، و همان ورودی قابل فراخوانی را برمی گرداند
بدون تغییر آن
بیایید از آن برای تزئین (یا بسته بندی) عملکرد دیگری استفاده کنیم:
def greet():
return ‘Hello!’
greet = null_decorator(greet)
greet()
‘Hello!’
در این مثال، من یک تابع سلام و سپس بلافاصله تعریف کرده ام
آن را با اجرای آن از طریق تابع null_decorator تزئین کرد. من می دانم که این هنوز خیلی مفید به نظر نمی رسد. منظورم این است که ما به طور خاص دکوراتور بی فایده را امضا کردیم، درست است؟ اما در یک لحظه این مثال نحوه عملکرد نحو دکوراتور مورد خاص پایتون را روشن خواهد کرد.
به جای اینکه صریحاً null_decorator را در greet فراخوانی کنید و سپس متغیر greet را مجدداً امضا کنید، میتوانید از دستور @ Python برای تزئین راحتتر یک تابع استفاده کنید.
@null_decorator
def greet():
return ‘Hello!’
greet()
‘Hello!’
قرار دادن یک خط @null_decorator در جلوی تعریف تابع است
مانند تعریف تابع ابتدا و سپس اجرا از طریق
دکوراتور استفاده از نحو @ فقط قند نحوی و میانبر است
برای این الگوی رایج
توجه داشته باشید که با استفاده از نحو @ تابع را بلافاصله در تزئین می کند
زمان تعریف این امر دسترسی به اصل بدون تزئین بدون هک های شکننده را دشوار می کند. بنابراین می توانید تزئین را انتخاب کنید
برخی از توابع به صورت دستی به منظور حفظ توانایی فراخوانی تابع تزئین نشده نیز انجام می شود.
دکوراتورها می توانند رفتار را اصلاح کنند
اکنون که کمی با نحو دکوراتور آشنا شدید، بیایید
دکوراتور دیگری بنویسید که در واقع کاری انجام می دهد و آن را اصلاح می کند
رفتار تابع تزئین شده
در اینجا یک دکوراتور کمی پیچیده تر است که نتیجه را تبدیل می کند
تابع تزئین شده به حروف بزرگ:
def uppercase(func):
def wrapper():
original_result = func()
modified_result = original_result.upper()
return modified_result
return wrapper
قوانین ارسال دیدگاه در سایت