Python print如何准确地处理逗号?
我原本以为:Python print如何准确地处理逗号?,python,python-2.7,printing,python-internals,Python,Python 2.7,Printing,Python Internals,我原本以为: print "text", 将与 sys.stdout.write("text" + " ") 但后来我尝试了以下几点: print '(', sys.stdout.write("text") print ')' 预期产出: ( text) 或 我得到的是: (text) # no space at all 有人能解释这种行为吗?我只是好奇打印包括将项目转换为字符串,然后将它们写入文件对象(默认情况下是sys.stdout)。在Python 2中,print语句在写入的
print "text",
将与
sys.stdout.write("text" + " ")
但后来我尝试了以下几点:
print '(',
sys.stdout.write("text")
print ')'
预期产出:
( text)
或
我得到的是:
(text) # no space at all
有人能解释这种行为吗?我只是好奇打印包括将项目转换为字符串,然后将它们写入文件对象(默认情况下是
sys.stdout
)。在Python 2中,print
语句在写入的文件对象上保留一个标记,称为软空间标记。请参见Python C API中的和
此标志用于跟踪何时写入空格。打印在内部实现为一系列,并管理标志:
- 打印项目(使用
或PRINT_item
)首先检查标志,如果设置了标志,则会写入空格,在写入项目后,会再次设置标志PRINT_item_TO
- 写入换行是一个单独的操作码(
或PRINT\u newline
),并且在不写入空格的情况下清除标志PRINT\u newline\u TO
sys.stdout.write()
)时,会清除该标志(在执行写入之前):
(我使用了if
块来防止解释器循环在两者之间写入提示符)
这就是您的示例中发生的情况:
写入(
并设置sys.stdout
)sys.stdout.softspace
再次清除标志并写出sys.stdout.write('text')
text
- 在写入
之前,)
检查标志,发现标志未设置,然后写入打印项目
。标志再次设置)
- 通过
写入新行,再次清除该标志PRINT\u newline
所有这些都是为了跟踪一个简单的特性而做的大量工作,也是Python3迁移到打印函数的原因之一。请参阅。我也在控制台中进行了尝试,并使用
如果为True:
一次执行所有命令;)谢谢你的解释@阿迈尔:我刚刚在那里偷了如果是真的
想法;-)
(text) # no space at all
>>> import sys
>>> if True:
... sys.stdout.softspace = 1
... sys.stdout.write('{}\n'.format(sys.stdout.softspace))
... sys.stdout.softspace
...
1
0