我刚刚在python解释器上执行了以下程序:

>>> def mylife(x):
...     if x>0:
...             print(x)
...     else:
...             print(-x)
... 
>>> mylife(01)
File "<stdin>", line 1
mylife(01)
        ^
SyntaxError: invalid token
>>> mylife(1)
1
>>> mylife(-1)
1
>>> mylife(0)
0

现在,我已经看到了this,但正如链接所说,八进制的0在python中不再起作用(也就是说,在python3中不起作用).但这不意味着应该正确解释以0开头的数字的行为吗?是在base-2还是在正常的base-10表示中?既然不是这样,为什么python会这样做?这是一个执行问题吗?还是语义问题?

推荐答案

我的猜测是,因为在python3中,012不再是一个八进制常量.x、 他们不允许012语法,以避免奇怪的向后兼容性错误.考虑一下你的Python 2.使用八进制文字常量的x脚本:

a = 012 + 013

然后将其移植到Python3,它仍然可以工作——它只会给您a = 25,而不是您之前预期的a = 21(十进制).找到那个虫子玩得开心.

Python-3.x相关问答推荐

如何翻转以列形式给出的日期间隔并提取多个重叠时段内每小时的音量?

在Python中从mySQL获取多行

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

PyQt5 中耦合滑块和拨号小部件.解决结果不一致的问题

找到在指定列的另一个分组中存在重复的行.

Python base64.b32hexencode 未创建预期结果

无法使用 curve_fit() 在 python 中复制高斯函数的曲线拟合

如何在 on_ready 事件中使用 change_presence? (discord.py)

FastAPI - 调用 API 时设置 response_model_exclude

如何在python中将列表转换为其他格式

Tkinter AttributeError:对象没有属性'tk'

Python 异步调试示例

django - 值更改后自动更新日期

Python heapify() 时间复杂度

如何在不使用 @hydra.main() 的情况下获取 Hydra 配置

创建集合的 Python 性能比较 - set() 与 {} 文字

如何在 jupyter notebook 5 中逐行分析 python 3.5 代码

如何正确创建自定义文本编解码器?

警告:请使用 tensorflow/models 中的官方/mnist/dataset.py 等替代方案

__iter__ 和 __getitem__ 有什么区别?