【问题标题】:What is >> for after print command in python 2?python 2中的打印命令后>>是什么?
【发布时间】:2013-03-26 11:50:20
【问题描述】:
import cStringIO

output = cStringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'

# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()

第 5 行 print 语句中的 >>output 有什么作用?

【问题讨论】:

    标签: printing python-2.x stringio


    【解决方案1】:

    它将print 语句输出重定向到打开的类似文件的对象。见print statement documentation

    print 还具有扩展形式,由上述语法的第二部分定义。这种形式有时被称为“打印人字形”。在这种形式中,>> 之后的第一个表达式必须计算为“类文件”对象,特别是具有上述write() 方法的对象。使用此扩展形式,后续表达式将打印到此文件对象。如果第一个表达式的计算结果为None,则sys.stdout 用作输出文件。

    基本上,该行被转换为output.write('Second line.' + '\n') asprint` 会在其输出中添加一个换行符,除非表达式以逗号结尾。

    该语法基于 bash 附加 >> 语法(这也影响了 C++ <<>> I/O 运算符);请参阅 PEP 214 了解选择此选项的全部动机。

    在 Python 3 中,print() 是一个函数,你可以这样写:

    print('Second line.', file=output)
    

    改为。

    【讨论】:

    • 我删除了关于可能的语法起源的句子,以防止任何可能的错误信息传播。我非常怀疑这是真的。文档没有提到,[需要引用]。
    • @ulidtko:你为什么怀疑这是真的还是错误的信息? C++ 肯定有这种语法。
    • @ulidtko:我会完善它;语法的动机记录在PEP 214
    • 因为 1) 在 C++ 中 stream >> var 表示 输入; 2) 输出为stream << "value"; 3)它不是以任何方式重定向。
    • @ulidtko:PEP 提到了这一点,是的。将来,我将不胜感激;如果(像往常一样)事实证明我又错了,我很乐意讨论和解决问题。
    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多