Re: [問題] python閉包的語法(修改後囉)

作者: sating00 (sating00)   2019-07-30 22:29:07
簡單的回覆一下:
```
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
作者: stucode   2019-07-30 23:23:00
推你熱心,不過解釋得不太對。2. f = outer()不是讓 outer() 可以用 f 呼叫,而是當場呼叫 outer()並把它的傳回值(也就是 inner 這個 function)assign 給 f。3. print(f(b))呼叫 f(b) 等於呼叫 inner(b),不是呼叫 outer()。所以下面 4. 5. 8. 的流程完全是錯的。
作者: sating00 (sating00)   2019-07-31 14:23:00
抱歉,因為也還在學習,所以只能盡力的解釋,感謝大佬的指正。文章就不另修改了,請原提問者看留言解釋即可。

Links booklink

Contact Us: admin [ a t ] ucptt.com