global的使用问题

问题遇到的现象和发生背景

img

img

问题相关代码,请勿粘贴截图

```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级别的