Python中的`print`如何将额外的文本传递给sys.stdout?

5

我可能错过了些什么很愚蠢的东西,但这真的让我在我正在编写的一个更大的项目(c扩展)上遇到了困难。

为什么在这里print "Hello, World!"会向sys.stdout传递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'
>>> 
3个回答

8

print x() 打印的是 x() 的返回值,该返回值默认为 None

要么将 print "Hello world" 替换为 return "Hello world",要么将 print x() 替换为 x()


1
哦我的天啊,我刚刚意识到我的 def x() 是在打印而不是返回......我真是个白痴..谢谢!! - chown

3

两件事情:

首先,print语句会自动换行,除非你特别指定。如果你不想新起一行,可以加上逗号:

print "Hello, World!",

其次,您正在打印x()函数的返回值,该返回值为None。函数f()等同于以下内容:

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

所以print x()会打印出None

谢谢!这是我犯傻了...我应该返回“Hello, World!”而不是打印它。问题解决 =)。 - chown

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

将执行print并返回None - print会生成额外的换行符,而None则是因为你写了print x() :)

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

def x():
   sys.stdout.write("Hello, World!")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接