Re: [問題] python閉包的語法(修改後囉)
簡單的回覆一下:
```
def somethings(a,b):
```
在小弟跟同學解釋類似的東西的時候,都會把他稱之為函數
要用更簡單的說就是: sin(pi)=0 cos(pi)=-1 類似的意思,
括號內丟個東西進去(或是也可以不用丟),經過他其中的程式碼,
將你丟進去的東西轉換成別的我想要的東西(有點繞口)。
現在來看你的程式碼吧!
code:
====
def outer():
b = 10
def inner(x):
return 5 * x + b
return inner
b = 2
f = outer()
print(f(b))
====
這邊我們要理解的是:程式雖然是由上開始逐行執行,但是def只是一個函數,
只有在我們需要他的時候才會呼叫他,
還有不同函數的代號是分開理解的,所以outer()的b跟,
b=2的b是不一樣的b。
所以從b=2開始執行,
1. b = 2
2. 讓outer()這個函數也可以用f來呼叫他
3. 輸出f(b),也就是執行outer()
4. outer()裡面的b=10,中間的inner(x)還沒呼叫到所以不執行
5. return inner 先呼叫inner
6. inner(x)需要的東西在這邊會稱為x,那他原本是甚麼呢?就是我們
一開始放進去的b(也就是2)
7. return 5 * x + b
\_就是2 \_就是10,因為在outer裡面的b都被我們定義為10
8. 回到5. return inner 回傳inner給我們的值
9. print(f(b)) 輸出:20
end_
要理解為甚麼7. 的x 是二而不是10可以看看我修改後的範例:
https://imgur.com/685sX38

大guy寺john
--
~/sating00▶¶研究所☁▎
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.224.144.196 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1564496956.A.6C7.html
※ 編輯: sating00 (61.224.144.196 臺灣), 07/30/2019 23:10:07
推
07/30 23:23,
6年前
, 1F
07/30 23:23, 1F
→
07/30 23:23,
6年前
, 2F
07/30 23:23, 2F
→
07/30 23:23,
6年前
, 3F
07/30 23:23, 3F
→
07/30 23:24,
6年前
, 4F
07/30 23:24, 4F
→
07/30 23:24,
6年前
, 5F
07/30 23:24, 5F
→
07/30 23:24,
6年前
, 6F
07/30 23:24, 6F
→
07/30 23:24,
6年前
, 7F
07/30 23:24, 7F
→
07/30 23:24,
6年前
, 8F
07/30 23:24, 8F
→
07/31 14:23,
6年前
, 9F
07/31 14:23, 9F
→
07/31 14:23,
6年前
, 10F
07/31 14:23, 10F
→
07/31 14:26,
6年前
, 11F
07/31 14:26, 11F
Python 近期熱門文章
PTT數位生活區 即時熱門文章