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字符做标识符,这无可厚非。但标识符这东西,只要你自己、和你合作的人看得懂、看得舒服就可以。别人怎么说,不太重要。
python中可以用中文作为变量-Python中用中文变量名、函数名,会影响性能吗?相关推荐
- python中使用sys模板和logging模块获取行号和函数名的方法
From: http://www.jb51.net/article/49026.htm 这篇文章主要介绍了python中使用sys模板和logging模块获取行号和函数名的方法,需要的朋友可以参考下 ...
- python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
如下所示: #-*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt from matplotlib.font_ ...
- python中的命名空间_深入理解Python中的命名空间和范围
Python中的命名空间和范围 在Python中,每个包.模块.类.函数和方法函数都拥有一个"名称空间",其中解析了变量名称.下面本篇文章就来带大家认识一下Python中的命名空间 ...
- python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想
[递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...
- python统计元音字母个数_计算Python中的元音(Counting vowels in python)
计算Python中的元音(Counting vowels in python) def main(): print(count) def countVowels(string): vowel=(&qu ...
- python中输入字符串_简单讲解Python中的字符串与字符串的输入输出
简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...
- python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解
本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...
- python中获取文件大小_如何在Python中获取文件大小
python中获取文件大小 We can get file size in Python using the os module. 我们可以使用os模块在Python中获取文件大小. Python中的 ...
- python中len用法_简单介绍Python中的len()函数的使用
简单介绍Python中的len()函数的使用 函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数:str:要计算的字符串.列表.字典.元组等 4:返回 ...
- python中数字是常量吗,【python】常量与变量
1.代码 (1)机器码:由二进制组成,是给计算机看的,计算机可以直接执行. (2)汇编码:由数字.字母和符号组成的代码. 汇编语言书写的代码必须按照计算机的计算流程 (写代码的流程就是模拟计算机运行的 ...
最新文章
- 三个小命令检查电脑!
- 测试php是否连接mysql_如何测试php是否连接mysql成功
- 【机器学习】机器学习从零到掌握之十三 -- 教你理解Logistics回归之梯度上升算法
- nmon--linux压力测试工具
- Compound社区发起一项讨论 向5000名早期活跃用户发放总供应量5%的COMP代币
- Windows 7 下 QT5 开发环境搭建
- LINUX7安装APACHE
- golang数据库的操作,更新删除增加单行查找与多行查找
- echarts无数据时显示暂无数据或者用图片代替
- OpenCV-识别细胞图中的细胞总数
- Roguelike到底是啥?讲讲和Roguelike 相关知识(搬运)
- 在 OpenBSD 系统下的安装PHP
- D语言/DLang 2.085.1 发布,修复性迭代
- r语言中的或怎么表示什么不同_R语言 基本语法
- 正宇丨你选择了开始,就不要轻言放弃
- H5移动端禁止长按保存图片
- SPSS多元线性回归残差分析的基本方法
- Verilog中 reg和wire 用法 以及always和assign的区别
- 大型应用+go+java_企业应用程序,Go比Java更明智!
- 让子弹飞 | 院士深度解析Alphafold DB的未来影响