for e in collections: pass
在for 迴圈裡, 最後一個物件e一直存在在上下文中。就是在循環外面,接下來對e的引用仍然有效。
這裡有個問題容易被忽略,如果在循環之前已經有一個同名物件存在,這個物件是被覆蓋的。
如果在有程式碼感知的IDE中, IDE會提示變數是“重新宣告的”, 但執行時卻不會出錯。
for循環不是閉包,可以使用dis模組分解以下程式碼可以看到:
x = 5 for x in range(10): pass print x
將程式碼儲存到test.py文件,執行python -m dis test.py
C:UserPatrick python -m dis test.py
1 0 LOAD_CONST 0 (5)? 0 (x)
3 6 SETUP_LOOP 1 (range)
12 LOAD_CONST 12 LOAD_CONST (10)
15 CALL_FUNCTION 1
TER 6 (to 28)
22 STORE_NAME 25 JUMP_ABSOLUTE 19
>> 28 POP_BLOCK
6 >> 29 LOAD_NAME 0 (x)
_NEWLINE
34 LOAD_CONST 2 (None)
🎝是可見的,例如java, 因為java是強型別的語言, 如果重新宣告已存在的變數IDE會提示錯誤, 當然不同透過編譯。 通常在python程式設計中(可能是大多數的動態語言),有時即使聲明了同名的變量,程式沒有出現明顯的錯誤,但是一旦出錯,錯誤很難被發現。所以要避免與for迴圈中的變數重名。
在使用python模板語言編碼時尤其如此。程式碼編輯器沒有提示,不會發現錯誤在哪裡。這個是我碰到的極度怪異的例子。為什麼說怪異,因為邏輯上沒有任何問題。
在一個頁面模板裡面,當handler調用這個模板時,同時傳遞了兩個物件(從handler中,我使用tornado),一個page物件和一個pages列表。我的順序是這樣的:
{{ page.name if page else ''}}
🎝 %}
{% for page in pages%}
{{page.name}}
None
{{ page.markdown if page else ''}}問題來了,在運行的時候出錯了,提示在
{{ page.name if page else ''}}中錯誤page referenced before assignment.
暈死了, 找了一夜的錯,最後在把for循環中page的名字改為_page才運行了。
在模板呼叫過程裡,模板語言也是被翻譯到python字節碼,並且按行解析和出,所以根本沒有邏輯,不知道是tornado模板語言的bug。 所以注意變數名。
總之我認為tornado的exception trace非常不友善。
Python中變數的作用域搜尋順序:本地作用域(Local)→目前作用域被嵌入的本地作用域(Enclosing locals)→全域/模組作用域(Global)→內建作用域(Built-in)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版