PTT推薦

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

看板Soft_Job標題[請益] 迴圈邏輯問題 (leetcode, python)作者
lemonrude
(臉猛魯)
時間推噓 X 推:6 噓:8 →:33

以下代碼如果用 Default = False
跑迴圈的時候會說 default reference before assignment
https://i.imgur.com/giv72v8.jpg

圖 迴圈邏輯問題 (leetcode, python)
但如果把 Default 改成一個List 然後指到list 的第0位 卻可以成功執行
請問為什麼python的資料結構只能參照外面的list 跟dic ? 不能參照外面的單一variable嗎?
https://i.imgur.com/uRoopVD.jpg
圖 迴圈邏輯問題 (leetcode, python)
懇請解惑謝謝!

如果發文在這裡有不妥 請版主刪文
不好意思


--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.118.109 (臺灣)
PTT 網址

freeunixer05/24 01:25你看這個板像 python 板嗎?

大大別那麼兇

peien031205/24 01:27https://bit.ly/2ZzFRqX

peien031205/24 01:27我不是寫python的,不過我猜你需要宣告global才能用,

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

peien031205/24 01:27直接用,詳細的請其他高手回答

我知道如果用self.可以 我只是好奇為什麼有些可以參照外面有些不行

MOONY13505/24 01:38看起來是ref的問題

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

CYFer05/24 01:39nction內部有宣告variable=...這類的,python會把這個變數

CYFer05/24 01:39當成local variable。因此你function外面的default,如果沒

CYFer05/24 01:39有用global 是認不得的。那為什麼dict()或list()可以呢?因

CYFer05/24 01:39為list[idx],其實是在做function call哦!call的是 list.__

CYFer05/24 01:39getitem__ 或 list.__setitem__

MOONY13505/24 01:44-strategy/

CYFer05/24 01:56補充一下,python認變數的時候有LEGB原則。你在function 內

CYFer05/24 01:56寫了 default=true,已經讓function把裡面的default認成loca

CYFer05/24 01:56l variable了,所以以local variable的角度去看你的functio

CYFer05/24 01:56n, 確實沒有宣告一個創始數值因此報錯~

哇....長知識了 非常感謝!!!

drajan05/24 02:46Python寫那麼久我也是現在才學到l[i]是function call! 感

drajan05/24 02:46謝樓上

drajan05/24 02:48在function內部要使用外部的變數可以加nonlocal這個keywor

drajan05/24 02:48d

zo659600105/24 11:25python List 預設 Call by reference

※ 編輯: lemonrude (111.250.118.109 臺灣), 05/24/2020 12:29:57

sxy6723005/24 12:45我看了一下,你的gobal明明是bool但是第一個圖function

sxy6723005/24 12:45 forloop內的default卻給他一個default[0]==false的條

sxy6723005/24 12:45件判斷,這邊邏輯就蠻怪的。python 預設在function 外

sxy6723005/24 12:45的宣告就是gobal了......

CaptPlanet05/24 12:48/is-python-call-by-reference-or-call-by-value/amp/

sxy6723005/24 12:56另外,LEGB的原則是在宣告上的,依次是local func->encl

sxy6723005/24 12:56osed->global->buildit,從內找到外,如果python 編譯

sxy6723005/24 12:56器都找不到函式宣告才會跳nameError

sxy6723005/24 12:57打錯,*變數宣告

final0105/24 13:06懂點腦好嗎?討論程式碼用貼圖

不好意思第一次po 相關問題所以沒特別注意 日後會記得 謝謝指教

pptpptppt05/24 13:17代碼

jacknotblack05/24 13:24真的看不出這跟soft job有啥關

wayne1234505/24 13:47可以去搜尋variable scope,會有你要的解釋

splitline05/24 15:58代碼

※ 編輯: lemonrude (111.250.118.109 臺灣), 05/24/2020 16:42:13

Saaski05/24 17:21代碼

tttkkk05/24 18:36在 dfs() 裡的第一行放 global default

tttkkk05/24 18:42蠻有趣的觀察,Python 自動將複雜資料結構如List, Dict

tttkkk05/24 18:42隱含call by reference 傳入函式了。

iceman556605/24 20:05可憐

kingofsdtw05/24 20:23純噓貼圖

kingofsdtw05/24 23:07imporment 0xx.py?

s2994005/25 18:18不想變D卡

rugia81305/26 15:42回去你們中國的論壇問啊