name="alex" def foo(): name="lhf" def bar(): print(name) bar() foo() #执行结果使lhf,因为在寻找变量的时候,先在自己这里找,找不到就去上一级别找
name="alex"
def foo():
name="lhf"
def bar():
print(name)
return bar
print(foo()) #输出结果为一个内存地址,因为上面的返回值返回的是bar,返回一个函数名代表他的地址。但是注意这里没有运行foo,只是打印了返回值。
例题:
def test1():
print("i am in test1")
def test():
print("i am in test")
return test1
res=test() #执行test(),然后将返回值test1赋予res,这里返回的是test1的内存地址
print(res()) #执行test1的内存地址对应的函数,然后返回值打印,注意test1没有返回值,所以默认返回的是NOne
#输出结果为 i am in test
# i am in test1
# None
name="alex"
def foo():
name="lhf"
def bar():
print(name)
return bar
res=foo() #返回的是一个内存地址
print(res)
res() #内存地址+()代表执行这个函数
看懂这个例题的输出结果就可以
name="alex"
def foo():
name="lhf"
def bar():
name="wupeiqi"
def tt():
print(name)
return tt
return bar
abc=foo()
print(abc)
b=abc()
b()
foo()()() #这么写也行
原文:https://www.cnblogs.com/yxzymz/p/12736853.html