首页 > 解决方案 > 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 总是将打印值转换为字符串?

标签: pythontypesprintfpython-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'>

至于1vs 01,在 Python 2 中,前导零的数字是八进制:

>>> 010
8

这种语法在 Python 3 中是非法的,所以你得到SyntaxError: invalid token. 这发生在print语句看到发生了什么之前,所以它与print.

如果你想在 Python3 中用八进制写一个数字,正确的语法0o...如下:

>>> 0o10
8

推荐阅读