Python`print`将额外文本传递给系统标准?

2024-10-03 19:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是我缺少的一些愚蠢的东西,但它确实让我在写一个更大的项目(c扩展名)上耽搁了。在

为什么print "Hello, World!"在这里传递None和一个额外的\n到{}?在

>>> import sys
>>> class StdOutHook:
...     def write(self, text):
...         sys.__stdout__.write("stdout hook received text: %s\n" % repr(text))
... 
>>> class StdErrHook:
...     def write(self, text):
...         sys.__stderr__.write("stderr hook received text: %s\n" % repr(text))
... 
>>> sys.stdout = StdOutHook()
>>> sys.stderr = StdErrHook()
>>> 
>>> def x():
...     print "Hello, World!"
... 
>>> 
>>> print x()
stdout hook received text: 'Hello, World!'
stdout hook received text: '\n'
stdout hook received text: 'None'
stdout hook received text: '\n'
>>> 

Tags: textselfnonehelloworlddefstderrstdout
3条回答

两件事:

首先,“打印”会自动添加新行,除非您另有指定。如果不需要新行,请添加逗号:

print "Hello, World!",

其次,打印x()函数的返回值,该函数为None。函数f()相当于:

^{pr2}$

所以print x()打印None。在

def x():
   print "Hello, World!"

将执行print并返回None-在您编写print x()之后,print将生成其他新行,None将被打印:)

如果您希望消除额外的换行符,请将x改为:

^{pr2}$

print x()打印x()的返回值,该值隐式为None

print "Hello world"替换为return "Hello world",或者将print x()替换为{}

相关问题 更多 >