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

看板Soft_Job作者 (臉猛魯)時間3年前 (2020/05/24 01:10), 3年前編輯推噓-2(6833)
留言47則, 19人參與, 3年前最新討論串1/1
以下代碼如果用 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
懇請解惑謝謝! 如果發文在這裡有不妥 請版主刪文 不好意思 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.118.109 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1590253833.A.171.html

05/24 01:25, 3年前 , 1F
你看這個板像 python 板嗎?
05/24 01:25, 1F
大大別那麼兇

05/24 01:27, 3年前 , 2F
05/24 01:27, 2F

05/24 01:27, 3年前 , 3F
我不是寫python的,不過我猜你需要宣告global才能用,
05/24 01:27, 3F

05/24 01:27, 3年前 , 4F
至於陣列是因為那個變數直接指到指標的位置,所以才能
05/24 01:27, 4F

05/24 01:27, 3年前 , 5F
直接用,詳細的請其他高手回答
05/24 01:27, 5F
我知道如果用self.可以 我只是好奇為什麼有些可以參照外面有些不行

05/24 01:38, 3年前 , 6F
看起來是ref的問題
05/24 01:38, 6F

05/24 01:39, 3年前 , 7F
這個問題很有意思,我嘗試回答看看。 python的特性是如果fu
05/24 01:39, 7F

05/24 01:39, 3年前 , 8F
nction內部有宣告variable=...這類的,python會把這個變數
05/24 01:39, 8F

05/24 01:39, 3年前 , 9F
當成local variable。因此你function外面的default,如果沒
05/24 01:39, 9F

05/24 01:39, 3年前 , 10F
有用global 是認不得的。那為什麼dict()或list()可以呢?因
05/24 01:39, 10F

05/24 01:39, 3年前 , 11F
為list[idx],其實是在做function call哦!call的是 list.__
05/24 01:39, 11F

05/24 01:39, 3年前 , 12F
getitem__ 或 list.__setitem__
05/24 01:39, 12F

05/24 01:44, 3年前 , 13F

05/24 01:44, 3年前 , 14F
-strategy/
05/24 01:44, 14F

05/24 01:56, 3年前 , 15F
補充一下,python認變數的時候有LEGB原則。你在function 內
05/24 01:56, 15F

05/24 01:56, 3年前 , 16F
寫了 default=true,已經讓function把裡面的default認成loca
05/24 01:56, 16F

05/24 01:56, 3年前 , 17F
l variable了,所以以local variable的角度去看你的functio
05/24 01:56, 17F

05/24 01:56, 3年前 , 18F
n, 確實沒有宣告一個創始數值因此報錯~
05/24 01:56, 18F
哇....長知識了 非常感謝!!!

05/24 02:46, 3年前 , 19F
Python寫那麼久我也是現在才學到l[i]是function call! 感
05/24 02:46, 19F

05/24 02:46, 3年前 , 20F
謝樓上
05/24 02:46, 20F

05/24 02:48, 3年前 , 21F
在function內部要使用外部的變數可以加nonlocal這個keywor
05/24 02:48, 21F

05/24 02:48, 3年前 , 22F
d
05/24 02:48, 22F

05/24 11:25, 3年前 , 23F
python List 預設 Call by reference
05/24 11:25, 23F
※ 編輯: lemonrude (111.250.118.109 臺灣), 05/24/2020 12:29:57

05/24 12:45, 3年前 , 24F
我看了一下,你的gobal明明是bool但是第一個圖function
05/24 12:45, 24F

05/24 12:45, 3年前 , 25F
forloop內的default卻給他一個default[0]==false的條
05/24 12:45, 25F

05/24 12:45, 3年前 , 26F
件判斷,這邊邏輯就蠻怪的。python 預設在function 外
05/24 12:45, 26F

05/24 12:45, 3年前 , 27F
的宣告就是gobal了......
05/24 12:45, 27F

05/24 12:48, 3年前 , 28F

05/24 12:48, 3年前 , 29F
/is-python-call-by-reference-or-call-by-value/amp/
05/24 12:48, 29F

05/24 12:56, 3年前 , 30F
另外,LEGB的原則是在宣告上的,依次是local func->encl
05/24 12:56, 30F

05/24 12:56, 3年前 , 31F
osed->global->buildit,從內找到外,如果python 編譯
05/24 12:56, 31F

05/24 12:56, 3年前 , 32F
器都找不到函式宣告才會跳nameError
05/24 12:56, 32F

05/24 12:57, 3年前 , 33F
打錯,*變數宣告
05/24 12:57, 33F

05/24 13:06, 3年前 , 34F
懂點腦好嗎?討論程式碼用貼圖
05/24 13:06, 34F
不好意思第一次po 相關問題所以沒特別注意 日後會記得 謝謝指教

05/24 13:17, 3年前 , 35F
代碼
05/24 13:17, 35F

05/24 13:24, 3年前 , 36F
真的看不出這跟soft job有啥關
05/24 13:24, 36F

05/24 13:47, 3年前 , 37F
可以去搜尋variable scope,會有你要的解釋
05/24 13:47, 37F

05/24 15:58, 3年前 , 38F
代碼
05/24 15:58, 38F
※ 編輯: lemonrude (111.250.118.109 臺灣), 05/24/2020 16:42:13

05/24 17:21, 3年前 , 39F
代碼
05/24 17:21, 39F

05/24 18:36, 3年前 , 40F
在 dfs() 裡的第一行放 global default
05/24 18:36, 40F

05/24 18:42, 3年前 , 41F
蠻有趣的觀察,Python 自動將複雜資料結構如List, Dict
05/24 18:42, 41F

05/24 18:42, 3年前 , 42F
隱含call by reference 傳入函式了。
05/24 18:42, 42F

05/24 20:05, 3年前 , 43F
可憐
05/24 20:05, 43F

05/24 20:23, 3年前 , 44F
純噓貼圖
05/24 20:23, 44F

05/24 23:07, 3年前 , 45F
imporment 0xx.py?
05/24 23:07, 45F

05/25 18:18, 3年前 , 46F
不想變D卡
05/25 18:18, 46F

05/26 15:42, 3年前 , 47F
回去你們中國的論壇問啊
05/26 15:42, 47F
文章代碼(AID): #1UoLa95n (Soft_Job)