使用装饰器后报错,急急急
def jiujiu(func):def chengfa():
print('未执行九九乘法')
res = func()
print('九九乘法已打印完成')
return res
return chengfa()
@jiujiu
def jiujiuchengfa():
for i in range(1, 10):
for j in range(1, i + 1):
print("%s * %s = %s" % (j, i, j * i), end=" ")
print("")
if __name__ == '__main__':
jiujiuchengfa()
执行结果:
Traceback (most recent call last):
File "D:\Project\git-test-lmf\p01\m_01.py", line 370, in <module>
jiujiuchengfa()
TypeError: 'NoneType' object is not callable
未执行九九乘法
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
九九乘法已打印完成
求救,这里为什么会报错‘NoneType',明明已经执行完成了 def jiujiu(func):
def chengfa():
print('未执行九九乘法')
res = func()
print('九九乘法已打印完成')
return res
return chengfa()
@jiujiu
def jiujiuchengfa():
for i in range(1, 10):
for j in range(1, i + 1):
print("%s * %s = %s" % (j, i, j * i), end=" ")
print("")
# if __name__ == '__main__':
# jiujiuchengfa()
注释掉main方法就不会报错了 def fun_a(func): # fun_b函数的地址
def function():
print("函数执行前的操作")
res = func() # 调用fun_b函数
print("函数执行之后的操作")
return res # 返回fun_b()函数的返回值
return function # 返回闭包内层函数地址,方便用户调用
@fun_a# 这种写法,等价于fun_b=fun_a(fun_b)
def fun_b():
print("执行fun_b函数")
#fun_b()# 实际上执行的是装饰器内层函数function
同样的方法,fun_b()注释掉后console并不会输出结果了,需要解除fun_b()的注释才能输出结果。原因是什么呢 本帖最后由 jackz007 于 2022-11-18 12:05 编辑
return chengfa# 这一句有错已经改正,这个是闭包,要去掉括号,目的为了把内嵌函数公开,让外边可以随便调用 jackz007 发表于 2022-11-18 12:03
感谢大佬,如果chengfa带上()就不是闭包函数了,是这个意思吗 本帖最后由 jackz007 于 2022-11-18 21:47 编辑
Mefine 发表于 2022-11-18 12:05
感谢大佬,如果chengfa带上()就不是闭包函数了,是这个意思吗
是的,如果带上括号,那就成了函数调用了,返回的是函数的调用结果,而不是调用地址,那就无法实现闭包的效果了。 jackz007 发表于 2022-11-18 21:45
是的,如果带上括号,那就成了函数调用了,返回的是函数的调用结果,而不是调用地址,那就无法实 ...
感谢大佬解答疑惑。。
页:
[1]