python - Python 2.x 是否总是为打印语句返回一个字符串?
问题描述
我在使用 Python 3.8 和 2.7 时都在搞乱,发现 Python 3 中的 print 函数不允许在 print 中使用前导零。见下文:
>>> print(01)
File "<stdin>", line 1
print(01)
^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
我想这是因为 Python 3.x 即使在打印时也会区分数据类型,这就是以下工作的原因:
>>> print('01')
01
我明确要求打印一个字符串。尽管在 Python 2.7 中,以下语句没有错误:
>>> print '01'
01
它只是返回我问的内容。这是否意味着 Python 2.x 总是将打印值转换为字符串?
解决方案
在原始的 python 2 中,print
是一个语句,根本不是return
一个值。
>>> x=print 'hi'
File "<stdin>", line 1
x=print 'hi'
^
SyntaxError: invalid syntax
例如,如果您在 python 2.7 中使用未来兼容的打印功能,它的行为与 Python 3 完全相同。
在 Python 3 中print
,函数总是返回None
. 它打印到一个文件(通常是标准输出),但从函数返回的值是None
.
>>> x=print(1)
1
>>> x
>>> type(x)
<type 'NoneType'>
至于1
vs 01
,在 Python 2 中,前导零的数字是八进制:
>>> 010
8
这种语法在 Python 3 中是非法的,所以你得到SyntaxError: invalid token
. 这发生在print
语句看到发生了什么之前,所以它与print
.
如果你想在 Python3 中用八进制写一个数字,正确的语法0o...
如下:
>>> 0o10
8
推荐阅读
- ios - PopoverViewController 出现后如何更改其大小?
- git - 克隆可以将分支放在单独的文件夹中吗?
- python - Python unittest - 设置警告:ResourceWarning
- amazon-web-services - 当 AWS Lambda 函数失败时,如何获得更具体的 CloudWatch 警报?
- java - 要查找的多个正则表达式模式。爪哇
- ssis - '=' 附近的语法错误
- mysql - 变量“sql_mode”不能设置为“NO_AUTO_CREATE_USER”的值
- php - 更改元素样式前需要刷新页面
- java - 如何将preferences.xml 链接到我的tablayout 中的settingsTabFragment?
- ruby - 转换 to_i 不起作用(Ruby)