【问题标题】:print.__doc__ vs getattr(__builtin__,"print").__doc__print.__doc__ vs getattr(__builtin__,"print").__doc__
【发布时间】:2014-05-30 09:21:17
【问题描述】:

print.__doc__ 输出:

SyntaxError: invalid syntax

在哪里

>>> getattr(__builtin__,"print").__doc__

输出:

print(value, ..., sep=' ', end='\n', file=sys.stdout)

将值打印到流中,默认情况下打印到sys.stdout。可选关键字参数:

file : 一个类似文件的对象(流);默认为当前的sys.stdout
sep:在值之间插入字符串,默认为空格。
end:在最后一个值之后附加的字符串,默认为换行符。

谁能帮我理解为什么print.__doc__ 给出语法错误而不是打印文档字符串

【问题讨论】:

    标签: python python-2.x


    【解决方案1】:

    在 Python 2(或 Python print 绝对不像函数,因此没有文档字符串。它甚至不会在开始打印之前评估其所有参数:

    >>> print 42, a
    42
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined
    

    42 在评估 a 之前打印。 print 是一个语句,它后面需要 0 到 N 个逗号分隔的表达式,可选地前面是构造 &gt;&gt; file,构造 print.__doc__ 是非法的。它与if.__doc__return.__doc__ 一样没有意义。

    然而,从 Python 2.6 开始,print 函数__builtin__ 模块中可用,但默认情况下不使用 print 语句 冲突使用它,除非print 的解析被from __future__ import print_function 禁用。

    【讨论】:

      【解决方案2】:

      Print 在 Python 2 中不能作为函数全局使用,因此您不能将其视为对象。这是一个声明。

      但是,在 Python 3 或带有 from __future__ import print_function 的 Python 2 中,print 是一个普通函数,您可以读取 __doc__ 属性。

      见:https://docs.python.org/2/library/functions.html#print

      注意:此函数通常不能作为内置函数使用,因为名称 print 被识别为 print 语句。要禁用该语句并使用 print() 函数,请在模块顶部使用以下未来语句:

      from __future__ import print_function
      

      【讨论】:

      • +1 我从来没有想过print 函数总是可用的,而且未来的导入只是禁用了print 语句,而不是使print 函数可用。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 2018-04-21
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多