```python
import functools
def deprecate(msg):
# todo
count = 1
def decorate(func):
#global count
#count = 1
def abandon():
global count
if count == 1:
print("Function f is deprecated, "+msg)
count -= 1
func()
return abandon
return decorate
pass
@deprecate("use f1 instead")
def f():
pass
f()
为什么会出现这种错误。但是decorate函数中的两条注释消去后,就没有问题了。为什么?
1.首先,count并不是一个全局变量,它是个局部变量,是定义在deprecate函数内部的
2.因为你函数套函数,global 在全局变量里找不到,就会到外层函数里去找,但是不能跨层次
3.你在2层里引用了1层定义好的count,3层里才能找到2层里定义好的count
如果2层里不global ,3层没办法直接去1层里找变量,除非你的count是个真正的全局变量
4.如果你不是想给学生出内卷题目,那么我劝你少这么玩,这样可读性非常差,代码难以维护
该从参数传进来的就从参数传进来,不要直接去拿全局变量。
少用函数套函数,应该直接定义在外面,这样才能更好的复用。
如果你一个函数只有函数内部才用,那就干脆定义成匿名的不香吗
global定义是file级别的