python中的闭包问题?
本帖最后由 zyj1214 于 2021-7-11 16:28 编辑def foo():
print("hello world in foo")
name="python"
def bar():
print(name)
print("hello world in bar")
return bar
f1=foo()
def func():
name="aaaaa"
f1()
func()
运行结果为什么是这样的?
hello world in foo
python
hello world in bar
因为你执行顺序是 foo() --> f1() --> func() 即函数执行顺序为: foo() --> bar() --> func()
这里按照执行顺序很容易看出来打印结果如下:
因为先调用函数 foo() 则先执行 foo 函数中的 print ,打印出 hello world in foo
而后调用 f1() 即 bar() ,则先打印 print(name) ,那么打印出 Python ,而后打印 print("hello world in bar")
最后在调用 func 函数,这个函数没有进行打印,所以实际效果
Twilight6 发表于 2021-7-11 16:39
因为你执行顺序是 foo() --> f1() --> func() 即函数执行顺序为: foo() --> bar() --> func()
这里按 ...
def foo():
print("hello world in foo")
name="python"
def bar():
print(name)
print("hello world in bar")
return bar
f1=foo() #这里是不是把foo()函数调用结束后的返回值赋值给f1,
#因为这里的返回值是 bar()函数的内存地址,所以f1的值
#就是 bar()函数在内存中的地址...可以这样理解吗?
def func():
name="aaaaa"
f1()#这里为什么f1后面要加小括号,才是调用 bar()函数?不理解?
#能给解释一下吗?
func() zyj1214 发表于 2021-7-11 16:55
def foo():
print("hello world in foo")
name="python"
这里为什么f1后面要加小括号
因为你前面调用 foo() ,而 foo() 函数返回的是 bar 函数体,所以你 f1 = foo() 就相当于 f1 = bar,则 f1() 就相当于 bar() Twilight6 发表于 2021-7-11 16:58
因为你前面调用 foo() ,而 foo() 函数返回的是 bar 函数体,所以你 f1 = foo() 就相当于 f1 = bar ...
def foo():
print("hello world in foo")
name="python"
def bar():
print(name)
print("hello world in bar")
return bar
f1=foo() #这里是不是把foo()函数调用结束后的返回值赋值给f1,
#因为这里的返回值是 bar()函数的函数名bar,所以f1的值
#就是 bar,,那么f1就是bar,f1=bar这个函数名.
def func():
name="aaaaa"
f1()#因为f1=bar函数名..所以f1 加 小括号 就是调用bar()函数...
#这样就理解了...
func()
页:
[1]