python变量名要求_Python中用中文变量名、函数名,会影响性能吗?
首先,python這樣的語言,只能做有限的"詞法編址"(lexical address),不可能實現 @王加加 所說的“所有變量名函數名等名稱,在轉成字節碼后,只是一個個地址,名稱只是在寫代碼的時候增加可讀性。”
為什么呢?因為很多動態語言使用的基本方法是“延遲綁定”(late binding)。這代表了兩個意思:創建綁定的過程是動態的
在環境里尋找綁定的過程也是動態的
我也可以斷言,python是不能完全避免“延遲綁定”的。
我沒有用過python,也不清楚python的實現,為什么我敢如此斷言呢?因為以下代碼可以在python解釋器里執行:
somename = input()
def a():
return 2
exec("def{}():\nreturn 1".format(somename))
print(a())
在shell里運行效果如下:
ayanamists@DESKTOP-KBI2TVT:~$ python test.py
"a"
1
顯然地,在執行之前的任何一個階段,都不可能知道a會綁定上什么東西。
至于那位答主根據字節碼給出的結果, 我在他的代碼中加上一行:
import dis
def a(s):
exec("s = 0")
return s+1
dis.dis(a)
print(a(1))
結果是
ayanamists@DESKTOP-KBI2TVT:~$ python test.py
3 0 LOAD_CONST 1 ('s = 0')
3 LOAD_CONST 0 (None)
6 DUP_TOP
7 EXEC_STMT
4 8 LOAD_FAST 0 (s)
11 LOAD_CONST 2 (1)
14 BINARY_ADD
15 RETURN_VALUE
1
這反而說明解釋器必須在運行時知道‘s’這個標識符對應的是0號局部變量。
綜上所述,python在編譯成字節碼時確實進行了一定的詞法編址工作,把一些綁定映射為了一個“地址”,但由于無法避免某些【延遲綁定】的出現,它不可能真正地扔掉標識符,某些時候仍然需要用標識符來尋找綁定。
至于題主的問題,從上面的分析可以看出如果沒有用標識符尋找綁定的過程,對性能沒有任何影響
如果有,影響最大的因素也應該是【標識符編碼后的長度】,當然,utf-8編碼下,非ascii字符確實比ascii字符要長,不過用python這種語言的時候,根本無需糾結這點性能。
另外,有些人不喜歡用非ascii字符做標識符,這無可厚非。但標識符這東西,只要你自己、和你合作的人看得懂、看得舒服就可以。別人怎么說,不太重要。
總結
以上是生活随笔為你收集整理的python变量名要求_Python中用中文变量名、函数名,会影响性能吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html动态跟随鼠标效果,使用JS实现气
- 下一篇: jq php异步上传图片,php+jqu