本帖最后由 傻眼貓咪 于 2021-9-15 21:22 编辑
你的代碼其實可以寫成:(我將 funIn 拿出來,運行結果一樣,這樣你比較容易明白)
- def funOut():
- return funIn
- def funIn():
- print('宾果!你成功访问到我啦!')
- funOut()() # 宾果!你成功访问到我啦!
- go = funOut()
- go() # 宾果!你成功访问到我啦!
复制代码
函數帶
有括號 () 表示
執行函數+返回值(如果有返回值,默認為 None),
沒有括號 表示
返回內存地址
A 表示返回函數 A 內存地址
A() 表示執行函數+返回值(如果有返回值)
A()() 表示執行函數+返回值(如果有返回值)+返回值(如果有返回值) # 這邊你會發現重複 2 次返回值,那麼返回什麼值呢?請看以下示例:
- def A():
- return B
- def B():
- return 13
- print(A)
- print(A())
- print(A()())
- print("------------------------")
- print(B)
- print(B())
复制代码- <function A at 0x0000021053BEDF70>
- <function B at 0x00000210540DBA60>
- 13
- ------------------------
- <function B at 0x00000210540DBA60>
- 13
复制代码以上打印 A,A() 和 A()() 都不同結果,但是你會發現答案了,打印 A 返回內存地址 A,A() 返回內存地址 B(這裡補充一下 B 的內存地址就是 A 的返回值),A()() 返回 B 值
結論:
A() 就是 B
A()() 就是 B()
至於為什麼會打印?只要有括號 () 就會執行函數 A()() 表示 B() 也就表示執行函數 B(打印)