آدرس : تهران میدان فردوسی خیابان ایرانشهر بین سمیه و طالقانی مجتمع تجاری میلاد واحد 9

پشتیبانی 24 ساعته : 02188867940 – 09927674217

برای مشاهده لیست علاقه مندی ها وارد شوید!

مشاهده محصولات فروشگاه
0

هیچ محصولی در سبد خرید نیست.

دکوراتورها می توانند رفتار را اصلاح کنند

دسته بندی :اخبار سایت 21 فوریه 2023 علیرضا بابامرادی 279

اکنون که کمی با نحو دکوراتور آشنا شدید، بیایید دکوراتور دیگری بنویسید که در واقع کاری انجام می دهد و آن را اصلاح می کند در اینجا یک دکوراتور کمی پیچیده تر است که نتیجه را تبدیل می کند تابع تزئین شده به حروف بزرگ:def uppercase(func): رفتار تابع تزئین شده def wrapper(): modified_result = original_result.upper() return modified_result return wrapperبه جای برگرداندن تابع ورودی مانند دکور تهی، این دکوراتور با حروف بزرگ یک تابع جدید را در جریان تعریف می کند. closure) و از آن برای بسته بندی تابع ورودی به منظور اصلاح آن استفاده می کند رفتار در زمان تماس original_result = func() بسته شدن لفاف به عملکرد ورودی تزئین نشده دسترسی دارد و تابع. (از نظر فنی، حتی نیازی به فراخوانی تابع ورودی ندارد اصلا.) اجرای کد اضافی قبل و بعد از فراخوانی ورودی رایگان است توجه داشته باشید که چگونه، تا به حال، تابع تزئین شده هرگز اجرا نشده است. در واقع فراخوانی تابع ورودی در این مرحله باعث نمی شود هر حسی داشته باشید – شما می خواهید که دکوراتور بتواند رفتار را اصلاح کند ممکن است بخواهید اجازه دهید که برای یک یا دو دقیقه غرق شود. من می دانم چگونه ممکن است این چیزها پیچیده به نظر برسد، اما ما با هم آن را حل خواهیم کرد، من وعده. تابع ورودی آن زمانی که در نهایت فراخوانی می شود. وقت آن است که دکوراتور بزرگ را در عمل ببینیم. چه اتفاقی می افتد اگر شما تابع سلام اصلی را با آن تزئین کنید؟def greet(): @uppercase return ‘Hello!’ ‘HELLO!’امیدوارم این نتیجه ای بود که انتظار داشتید. بیایید نگاهی دقیق تر به چه چیزی بیندازیم فقط اینجا اتفاق افتاد برخلاف null_decorator، decora tor ما با حروف بزرگ یک شی تابع متفاوت را هنگامی که یک تابع را تزئین می کند، برمی گرداند:>>> greet >>> greet() <function greet at 0x10e9f0950> <function greet at 0x10e9f0950> >>> null_decorator(greet) <function uppercase.<locals>.wrapper at 0x76da02f28>و همانطور که قبلا دیدید، برای اصلاح آن باید این کار را انجام دهد رفتار تابع تزئین شده هنگامی که در نهایت فراخوانی می شود. را دکوراتور حروف بزرگ خود یک تابع است. و تنها راه نفوذ >>> uppercase(greet) wrap) تابع ورودی با یک بسته. “رفتار آینده” یک تابع ورودی که تزئین می کند جایگزین کردن (یا به همین دلیل است که حروف بزرگ یک تابع دیگر (بسته شدن) را تعریف می کند و برمی گرداند که می تواند در زمان دیگری فراخوانی شود، ورودی اصلی را اجرا کنید. دکوراتورها رفتار قابل فراخوانی را از طریق یک لفاف بسته می‌کنند تا مجبور نباشید برای همیشه نسخه اصلی را تغییر دهید. قابلیت فراخوانی اصلی به طور دائم تغییر نمی کند – رفتار آن فقط تغییر می کند هنگام تزئین عملکرد، و نتیجه آن را اصلاح کنید. این به شما اجازه می‌دهد تا به بلوک‌های ساختمانی قابل استفاده مجدد، مانند ورود به سیستم و غیره بپردازید ابزار دقیق، به توابع و کلاس های موجود. این ویژگی دکوراتورها را چنان قدرتمند در پایتون می کند که اغلب در پایتون از آن استفاده می شود کتابخانه استاندارد و در بسته های شخص ثالث.

علیرضا بابامرادی

راه آسان‌تری برای ارتباط با کاربران‌مان پیدا کرده‌ایم :) عضویت در کانال

مطالب زیر را حتما بخوانید:

قوانین ارسال دیدگاه در سایت

  • چنانچه دیدگاهی توهین آمیز باشد تایید نخواهد شد.
  • چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
  • چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
  • چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
  • چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

لینک کوتاه:
0