cid007 发表于 2021-8-1 11:06:23

请教,为何上面的是错的,下面没错?

def f1():
      x=5
        def f2():
                x=x+1
                return x
        return f2()
a=f1()
print(a)
------------------------------------------
def f1():
      x=5
        def f2():
                y=x+1
                return y
        return f2()
a=f1()
print(a)

逃兵 发表于 2021-8-1 11:14:01

这是因为在函数内部对变量赋值进行修改后,该变量就会被Python解释器认为是局部变量而非全局变量

大马强 发表于 2021-8-1 12:33:24

你这个是闭包那里的内容吧,x是属于fun1的变量,你在fun2也可以重新声明一个x,但这两个是不一样的,后者属于fun2的内部变量,
内部函数只能对外部函数的变量进行访问,不能修改,要访问要是用 nonlocal 关键字 nonlocal x才行

大马强 发表于 2021-8-1 12:43:50

大马强 发表于 2021-8-1 12:33
你这个是闭包那里的内容吧,x是属于fun1的变量,你在fun2也可以重新声明一个x,但这两个是不一样的,后者属 ...

小甲鱼讲过的
页: [1]
查看完整版本: 请教,为何上面的是错的,下面没错?