摘要:起初是群里一個哥們這句話報錯。我竟然沒看懂代碼如下其實這個代碼不能很好的反應問題。來看以下兩個我一開始沒理解這個問題。看到和粗略的理解成不能夠在閉包函數中改變上層函數的變量。實際上是,如果一個變量被賦值,那么會認為其為局部變量。
起初是群里一個哥們這句話報錯。
后來之前的一個實習生,給出了鏈接來解釋這個問題。 我竟然沒看懂....
http://stackoverflow.com/questions/89347...
代碼如下:
def foo1(tmp =None): def foo(): if tmp: print tmp else : tmp = None return foo()
其實這個代碼不能很好的反應問題。來看以下兩個case
def foo1(var1 =None): def foo(): var1 = 1 + 1 print var1 return foo() def foo3(tmp=None): def foo(): c = tmp tmp = 1 + 1 return foo()
我一開始沒理解這個問題。看到assign variable 和access variable 粗略的理解成不能夠在閉包函數中改變上層函數的變量。但... 根本不是這回事。
實際上是, 如果一個變量被賦值,那么python會認為其為局部變量。局部變量只會在當前函數空間來找到變量(就是foo函數內),所以可以看到,在foo3中,解析器看到tmp = 1+1 就認為 tmp 為局部變量,然后想起來之前好像用過tmp,c= tmp ,發現tmp 在這句之前沒有被定義所以報錯了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37853.html
摘要:中文文檔中的變量提升,是指在聲明變量的代碼執行之前,可以進行初始化和使用而不是指在創建詞法環境階段是否會創建對應的標識符。 問題背景 今天在 chrome devtools 中運行以下代碼: function fn (name){ if (typeof name === undefined){ console.log(name:, name) let name ...
摘要:結果 Date Get the number of days in a month The 0th day of next month is the last day of the current month. function daysInMonth(year, month) { let date = new Date(year, month + 1, 0); ret...
摘要:一個表示編譯器檢測到一個無效的引用值。在實際情況中,往往是在獲取一個未被賦值的引用時被拋出。任何一個函數上下文都有一個被稱為活動對象的變量對象。沒有找到的話,就會認為引用名沒有基礎值并拋出的錯誤。下沒有下的屬性僅存在于被啟動的情況下。 和其他語言相比,javascript中的對于undefined的理解還是有點讓人困惑的。特別是試著理解ReferenceErrors錯誤(x is no...
摘要:環境問題發現最近剛從換到下搬磚,發現在跑的好好的代碼,在下終端老是報錯還是編碼錯誤注冊失敗坦白說,看到這個錯誤好無奈。既然能在跑,換到就出錯,那多半是環境問題了,然后我就開始了我的調試追蹤之旅了跟蹤調試先前調試都是一晃而過,只看結果。 環境:mac 10.12 python3 django 1.10 問題發現 最近剛從arch 換到 mac下搬磚, 發現在arch跑的好好的代碼,...
閱讀 3569·2021-11-18 13:20
閱讀 2727·2021-10-15 09:40
閱讀 1740·2021-10-11 10:58
閱讀 2107·2021-09-27 13:36
閱讀 2586·2021-09-07 10:06
閱讀 1848·2021-08-11 11:21
閱讀 1425·2019-08-29 17:04
閱讀 2080·2019-08-29 14:06