[請益] 迴圈邏輯問題 (leetcode, python)

作者: lemonrude (臉猛魯)   2020-05-24 01:10:31
以下代碼如果用 Default = False
跑迴圈的時候會說 default reference before assignment
https://i.imgur.com/giv72v8.jpg
但如果把 Default 改成一個List 然後指到list 的第0位 卻可以成功執行
請問為什麼python的資料結構只能參照外面的list 跟dic ? 不能參照外面的單一variabl
e嗎?
https://i.imgur.com/uRoopVD.jpg
懇請解惑謝謝!
如果發文在這裡有不妥 請版主刪文
不好意思
作者: freeunixer (御劍客)   2020-05-24 01:25:00
你看這個板像 python 板嗎?
作者: peien0312 (忍耐)   2020-05-24 01:27:00
https://bit.ly/2ZzFRqX我不是寫python的,不過我猜你需要宣告global才能用,至於陣列是因為那個變數直接指到指標的位置,所以才能直接用,詳細的請其他高手回答
作者: MOONY135 (談無慾)   2020-05-24 01:38:00
看起來是ref的問題
作者: CYFer (cyf994)   2020-05-24 01:39:00
這個問題很有意思,我嘗試回答看看。 python的特性是如果function內部有宣告variable=...這類的,python會把這個變數當成local variable。因此你function外面的default,如果沒有用global 是認不得的。那為什麼dict()或list()可以呢?因為list[idx],其實是在做function call哦!call的是 list.__getitem__ 或 list.__setitem__
作者: MOONY135 (談無慾)   2020-05-24 01:44:00
作者: CYFer (cyf994)   2020-05-24 01:56:00
補充一下,python認變數的時候有LEGB原則。你在function 內寫了 default=true,已經讓function把裡面的default認成local variable了,所以以local variable的角度去看你的function, 確實沒有宣告一個創始數值因此報錯~
作者: drajan (EasoN)   2020-05-24 02:46:00
Python寫那麼久我也是現在才學到l[i]是function call! 感謝樓上在function內部要使用外部的變數可以加nonlocal這個keyword
作者: zo6596001 (超帥肥宅)   2020-05-24 11:25:00
python List 預設 Call by reference
作者: sxy67230 (charlesgg)   2020-05-24 12:45:00
我看了一下,你的gobal明明是bool但是第一個圖functionforloop內的default卻給他一個default[0]==false的條件判斷,這邊邏輯就蠻怪的。python 預設在function 外的宣告就是gobal了......
作者: CaptPlanet (ep)   2020-05-24 12:48:00
https://www.google.com/amp/s/www.geeksforgeeks.org/is-python-call-by-reference-or-call-by-value/amp/
作者: sxy67230 (charlesgg)   2020-05-24 12:56:00
另外,LEGB的原則是在宣告上的,依次是local func->enclosed->global->buildit,從內找到外,如果python 編譯器都找不到函式宣告才會跳nameError打錯,*變數宣告
作者: final01 (牛頓運動定律)   2020-05-24 13:06:00
懂點腦好嗎?討論程式碼用貼圖
作者: pptpptppt (暱稱)   2020-05-24 13:17:00
代碼
作者: jacknotblack (大飛飛)   2020-05-24 13:24:00
真的看不出這跟soft job有啥關
作者: wayne12345 (lightrain)   2020-05-24 13:47:00
可以去搜尋variable scope,會有你要的解釋
作者: splitline (台ㄎ廢文王)   2020-05-24 15:58:00
代碼
作者: Saaski (GreedIsGood)   2020-05-24 17:21:00
代碼
作者: tttkkk (學到。)   2020-05-24 18:36:00
在 dfs() 裡的第一行放 global default蠻有趣的觀察,Python 自動將複雜資料結構如List, Dict隱含call by reference 傳入函式了。
作者: iceman5566 (iceman5566)   2020-05-24 20:05:00
可憐
作者: kingofsdtw (不能閒下來!!)   2020-05-24 20:23:00
純噓貼圖
作者: s29940 (阿賜)   2020-05-25 18:18:00
不想變D卡
作者: rugia813 (rugia)   2020-05-26 15:42:00
回去你們中國的論壇問啊

Links booklink

Contact Us: admin [ a t ] ucptt.com