gpt4 book ai didi

python - print 如何准确处理逗号?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:51 26 4
gpt4 key购买 nike

本来我以为:

print "text",

几乎和

一样
sys.stdout.write("text" + " ")

但后来我尝试了以下操作:

print '(',
sys.stdout.write("text")
print ')'

预期输出:

( text)

(text )  # if the space is added by the next print statement

我得到的:

(text)  # no space at all

谁能解释这种行为?我只是好奇

最佳答案

打印包括将项目转换为字符串,然后将它们写入文件对象(默认情况下为 sys.stdout)。在 Python 2 中,print 语句在您写入的文件对象上保留一个标志,称为软空间标志。查看file.softspace attributePyFile_SoftSpace() function在 Python C API 中。

此标志用于跟踪何时写入空格。打印在内部实现为一系列 PRINT_ opcodes ,以及那些管理标志的人:

  • 打印一个项目(使用PRINT_ITEMPRINT_ITEM_TO)首先检查标志,如果设置了将写入一个空格,在写出项目后将设置标志再次
  • 写入换行符是一个单独的操作码(PRINT_NEWLINEPRINT_NEWLINE_TO),无需写入空格即可清除标志。

但是,直接写入文件对象,就像您对 sys.stdout.write() 所做的那样,清除该标志(在执行写入之前):

>>> import sys
>>> if True:
... sys.stdout.softspace = 1
... sys.stdout.write('{}\n'.format(sys.stdout.softspace))
... sys.stdout.softspace
...
1
0

(我使用了一个 if block 来防止解释器循环在其间写入提示)。

这就是您的示例中发生的情况:

  • ( 写入 sys.stdout 并设置 sys.stdout.softspace
  • sys.stdout.write('text') 再次清除标志并写出text
  • 在写)之前,PRINT_ITEM检查标志,发现它没有设置,然后写)。旗帜再次升起。
  • PRINT_NEWLINE 写入换行符,再次清除标志。

所有这些都是跟踪一个简单功能的大量工作,也是 Python 3 转向函数进行打印的原因之一。参见 PEP 3105 .

关于python - print 如何准确处理逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44065403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com