为什么Python代码print(*range(*b'e'))会输出0到100的数字?
代码运行原理解释
我们逐层拆解print(*range(*b'e'))的执行逻辑:
- 首先看最内层的
b'e':这是Python的bytes类型对象,存储的是小写字母e对应的ASCII编码值。你可以执行print(ord('e'))验证,字母e的ASCII码就是十进制的101,单字符bytes本质是只包含一个整数元素的可迭代序列,也就是等价于[101]。 - 然后看
range(*b'e'):这里的*是Python的可迭代对象解包语法,会把b'e'里的元素逐个作为位置参数传给range。因为b'e'只有一个元素101,所以这段代码完全等价于range(101)。 - 接下来是
range(101)的效果:Python的range函数生成的是左闭右开的整数序列,只传一个参数的时候默认起点为0,终点不包含传入的参数值,所以range(101)生成的就是0、1、2……100这101个连续整数。 - 最后看外层的print调用:
print(*range(*b'e'))里的*同样是解包操作,会把range生成的101个整数全部传给print作为位置参数。print默认用空格分隔多个输入参数,所以最终输出就是0到100用空格连接的结果。
内容的提问来源于stack exchange,提问作者AziMez
相关产品推荐
相关产品推荐

