Python `print` 传递额外文本到 sys.stdout?
我可能遗漏了一些很简单的东西,但这让我在一个更大的项目(一个 c
扩展)上卡住了。
为什么这里的 print "Hello, World!"
会把 None
和一个多余的 \n
传给 sys.stdout
呢?
>>> 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 个回答
1
def x():
print "Hello, World!"
这段代码会执行 print
,然后返回 None
。因为你写了 print x()
,所以会多出一些空行,最后还会打印出 None
:)
如果你想去掉多余的空行,可以把 print
改成直接写 x
,像这样:
def x():
sys.stdout.write("Hello, World!")
3
两件事:
首先,打印的时候默认会自动换行,除非你特别说明不想换行。如果你不想换行,可以加一个逗号:
print "Hello, World!",
其次,你打印的是函数 x() 的返回值,而这个返回值是 None。函数 f()
的意思和下面这个是一样的:
def x():
print "Hello, World!"
return None
所以 print x()
打印出来的是 None
。
8
print x()
会输出 x()
的返回值,而这个返回值默认是 None
,也就是“什么都没有”。
你可以把 print "Hello world"
改成 return "Hello world"
,或者把 print x()
改成 x()
。