人们可以帮助我了解为什么我的python装饰器无法正常工作吗?
创建了一个装饰器,该装饰器将在返回car_fuel()函数的计数之后打印以下提到的文本。
def decor(func):
def wrapper(a):
func(a)
print('Bring 10 coupons and get a gallon of fuel for free')
return wrapper
@decor
def car_fuel(a):
b={'petrol':3.6,'diesel':3} #types of fuel and prices
count = 0
for i in a.keys():
if i in b.keys():
count+= a[i]*b[i]
return count
abc={'petrol':10} # the fuel that i wanna buy and gallons
print(car_fuel(abc))
我希望得到以下结果:
36 带来10张优惠券并免费获得一加仑燃料
但是我得到的是:
携带10张优惠券并免费获得一加仑燃料 没有
为什么在“带10张优惠券......”句子之前我没有收到36,为什么它返回None?
答案 0 :(得分:3)
因为包装的函数不返回任何内容-在python中表示隐式return None
。
修复:
def decor(func):
def wraper(a):
ret = func(a) # save return value
print('Bring 10 coupons and get a gallon of fuel for free')
return ret # return it
return wraper
输出:
Bring 10 coupons and get a gallon of fuel for free
36.0
答案 1 :(得分:0)
我编辑了装饰器。现在它可以正常工作了,谢谢@rdas。
`def decor(func):
def wraper(a):
r=func(a)
return str(r)+'\n'+'bring 10 coupons and get 10l free fuel'
return wraper`