• 1404/01/15

return func in wrapper-81 :

def check_string_length(characterCount):
    def inner_decorator(func):
        @wraps(func)
        def wrapper(name):
            if len(name) > characterCount:
                print("an error occured")
            else:
                func(name)
            # return func

        return wrapper

    return inner_decorator

سلام و عرض ادب. در مثال بالا متوجه نشدم چرا func رو تو else ریترن کردین؟
توضیحی هم ندادین راجب اون خط کد
در هر صورت لزومی نداشته خروجی بدون اون خط کد درسته. ولی اگه باید باشه دقیقا کارکردش چیه؟

  • 1404/01/16
  • ساعت 23:04

سلام خدمت شما دوست عزیز

جسارتا در اموزش این مورد کامل توضیح داده شده دوست من

اگر دقت کرده باشین عرض کردم که func اشاره میکنه به رفرنس همون فانکشنی که روی اون decorator تعریف شده

حالا اگر شما اون رو فراخوانی نکنین، عملا انگار فانکشن اجرا نمیشه و فقط دستور print شما اجرا میشه


  • 1404/01/17
  • ساعت 13:16

جسارتا فکر کنم متوجه سوالم نشدید.

خب wrapper , inner ریترن شده. func دیگه چرا باید ریترن بشه داخل wrapper ؟  

Func فراخوانی شده و اگه result داشته باشه باید اون ریترن بشه نه خود تابع. کدی که کامنت کردم رو توجه کنید


  • 1404/01/17
  • ساعت 21:33

این ساختارش هستش دوست من. اگر func() رو return نکنین ، اگر متد اصلی خودش چیزی رو return کرده باشه اونوقت کد شما به درستی کار نمیکنه

میتونین این مورد رو امتحان کنین

برای فانکشنی که از این دکوریتور استفاده کردین یک خروجی تعریف کنین و سعی کنین اون رو چاپ کنین. متوجه میشین که خروجی متد شما برگردونده نمیشه


  • 1404/01/18
  • ساعت 11:55

متن سوالم واضحه. میدونم func() باید ریترن بشه. اما شما خود شی تابع رو ریترن کردین. توجه کنید به کد. return func نوشتید نه return func().


logo-enamadlogo-samandehi