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

看板Python作者 (sating00)時間6年前 (2019/07/30 22:29), 6年前編輯推噓1(1010)
留言11則, 2人參與, 6年前最新討論串1/1
簡單的回覆一下: ``` 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
2. f = outer()
07/30 23:23, 2F

07/30 23:23, 6年前 , 3F
不是讓 outer() 可以用 f 呼叫,而是當場呼叫 outer()
07/30 23:23, 3F

07/30 23:24, 6年前 , 4F
並把它的傳回值(也就是 inner 這個 function)
07/30 23:24, 4F

07/30 23:24, 6年前 , 5F
assign 給 f。
07/30 23:24, 5F

07/30 23:24, 6年前 , 6F
3. print(f(b))
07/30 23:24, 6F

07/30 23:24, 6年前 , 7F
呼叫 f(b) 等於呼叫 inner(b),不是呼叫 outer()。
07/30 23:24, 7F

07/30 23:24, 6年前 , 8F
所以下面 4. 5. 8. 的流程完全是錯的。
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
文章代碼(AID): #1TG5GyR7 (Python)
文章代碼(AID): #1TG5GyR7 (Python)