關于嵌套:
嵌套使用中, ?retrun inner ?--->?返回的是函數的地址
?retrun inner() : ?? ---> ?運行inner()函數 ? ---> 運行inner()函數后的返回值a(假設)返回上級 ?--> ? ? ??retrun inner()得到返回值a
如果函數沒有指定返回值,那么默認的返回值就是 None
舉例1:
name = "老師"def outer():name = "小屁孩"def inner():print(name)return inner()ret = outer()
print(ret)#
運行結果:
?
舉例2(易錯,與舉例1對比):
這里要注意的是,inner是屬于 ?outer內部的函數,因此,“ 即使單獨運行 ” ?inner內部的函數,其內部的參數沒有定義的話,也會先去從它的上級函數找,這里inner的上級函數就是 ?outer
?
name = "老師"
def outer():name = "小屁孩"def inner():print(name)return innerret = outer()
ret() # 相當于運在outer當中運行了inner
print("ret = outer(): ",ret)
result = ret()
print("result = ret(): ",result) # 相當于運在outer當中運行了inner,并且要了inner的返回值
?
?
參考文獻:?
python基礎-基礎知識考試_day5 (包括:函數_遞歸等知識) - 努力哥 - 博客園
https://www.cnblogs.com/nulige/p/6128674.html,第30題
?
?
舉例3:
這里需要注意的是,形參func存放的是外部全局定義的函數show的地址。
outer(show)()運行過程: a =?outer(show) ?--> ? a()
name = "老師"def outer(func):print("outer!!")def inner():name = "李杰"func()return innerdef show():print("show!!")print(name)outer(show)()
運行結果:
?
舉例4(與舉例3區別):
?
name = "老師"def outer(func):print("name is given when ==>>func starts",name)def inner(name):print("name is given when ==>>inner starts",name)name = "李杰"func(name)return innerdef show(name):print("name is given when ==>>show starts",name)print(name)outer(show)(name)