python中可以用中文作为变量 |
您所在的位置:网站首页 › 能做python的变量名 › python中可以用中文作为变量 |
首先,python这样的语言,只能做有限的"词法编址"(lexical address),不可能实现 @王加加 所说的“所有变量名函数名等名称,在转成字节码后,只是一个个地址,名称只是在写代码的时候增加可读性。” 为什么呢?因为很多动态语言使用的基本方法是“延迟绑定”(late binding)。这代表了两个意思:创建绑定的过程是动态的 在环境里寻找绑定的过程也是动态的 我也可以断言,python是不能完全避免“延迟绑定”的。 我没有用过python,也不清楚python的实现,为什么我敢如此断言呢?因为以下代码可以在python解释器里执行: somename = input() def a(): return 2 exec("def{}(): return 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字符做标识符,这无可厚非。但标识符这东西,只要你自己、和你合作的人看得懂、看得舒服就可以。别人怎么说,不太重要。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |