softear 发表于 2020-7-5 17:09:58

闭包问题(y为什么变成了全局变量)

def fun1(x):
    def fun2(y):
      return x*y
    return fun2(y)
y=2
a=fun1(2)
print(a)
#为什么y变成了全局变量

永恒的蓝色梦想 发表于 2020-7-5 17:18:28

你在全局范围声明的 y,y 自然是全局变量。

边城下雨天 发表于 2020-7-5 17:19:18

因为你将y放在了函数外,如果你想y是局部变量,那就在函数内定义

Twilight6 发表于 2020-7-5 17:22:51

永恒的蓝色梦想 发表于 2020-7-5 17:18
你在全局范围声明的 y,y 自然是全局变量。

{:10_250:} 不提醒下我错了哈哈哈

永恒的蓝色梦想 发表于 2020-7-5 17:24:08

Twilight6 发表于 2020-7-5 17:22
不提醒下我错了哈哈哈

额,啥

Twilight6 发表于 2020-7-5 17:25:01

永恒的蓝色梦想 发表于 2020-7-5 17:24
额,啥

刚刚 copy 大法运用太过娴熟,所以没认真看题目 {:10_266:}现在删了

tiger吴 发表于 2020-7-5 17:53:31

1.你在全局范围声明的 y,y 自然是全局变量
y=2这是你给全局变量y赋值2的操作
2.你会提这个问题应该你你把这个全局变量y当成fun1的内嵌函数fun2的参数了,其实他们没有半毛钱关系,只是长的一样而已
3.你这段代码运行后的结果应该不是你想要的结果,把a=fun1(2)后面再加一个参数,如a=fun(2)(3),运行代码才会有你想要的效果

陈尚涵 发表于 2020-7-5 19:28:53

你在外面声明的y,当然是全局变量了

陈尚涵 发表于 2020-7-5 19:31:25

我看你函数闭包写错了把,应该在fun1里同时传x, y像这样:
def fun1(x, y):
    def fun2(y):
      return x * y
    return fun2(y)
a = fun1(2, 2)
#这时候a就是2 * 2也就是4了

临时号 发表于 2020-8-1 18:17:50

变量y是在全局范围声明的
页: [1]
查看完整版本: 闭包问题(y为什么变成了全局变量)