为什么python decorator使函数返回“ None”?

时间:2019-10-05 20:07:11

标签: python decorator wrapper

人们可以帮助我了解为什么我的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?

2 个答案:

答案 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`