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 ریترن کردین؟
توضیحی هم ندادین راجب اون خط کد
در هر صورت لزومی نداشته خروجی بدون اون خط کد درسته. ولی اگه باید باشه دقیقا کارکردش چیه؟
سلام خدمت شما دوست عزیز
جسارتا در اموزش این مورد کامل توضیح داده شده دوست من
اگر دقت کرده باشین عرض کردم که func اشاره میکنه به رفرنس همون فانکشنی که روی اون decorator تعریف شده
حالا اگر شما اون رو فراخوانی نکنین، عملا انگار فانکشن اجرا نمیشه و فقط دستور print شما اجرا میشه
جسارتا فکر کنم متوجه سوالم نشدید.
خب wrapper , inner ریترن شده. func دیگه چرا باید ریترن بشه داخل wrapper ؟
Func فراخوانی شده و اگه result داشته باشه باید اون ریترن بشه نه خود تابع. کدی که کامنت کردم رو توجه کنید
این ساختارش هستش دوست من. اگر func() رو return نکنین ، اگر متد اصلی خودش چیزی رو return کرده باشه اونوقت کد شما به درستی کار نمیکنه
میتونین این مورد رو امتحان کنین
برای فانکشنی که از این دکوریتور استفاده کردین یک خروجی تعریف کنین و سعی کنین اون رو چاپ کنین. متوجه میشین که خروجی متد شما برگردونده نمیشه
متن سوالم واضحه. میدونم func() باید ریترن بشه. اما شما خود شی تابع رو ریترن کردین. توجه کنید به کد. return func نوشتید نه return func().