python中可以用中文作为变量

您所在的位置:网站首页 能做python的变量名 python中可以用中文作为变量

python中可以用中文作为变量

2023-08-01 01:11| 来源: 网络整理| 查看: 265

首先,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