5

这可能是我错过的一些愚蠢的事情,但它确实让我挂断了c我正在编写的一个更大的项目(扩展)。

为什么是print "Hello, World!"传球None和额外的\nsys.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'
>>> 
4

3 回答 3

8

print x()x()打印隐含的返回值None

替换print "Hello world"return "Hello world"或替换print x()x()

于 2011-11-27T20:20:56.777 回答
3

两件事情:

首先,除非您另外指定,否则 print 会自动添加一个新行。如果您不想换行,请添加逗号:

print "Hello, World!",

其次,您正在打印 x() 函数的返回值,即 None。该函数f()等价于:

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

所以print x()打印None

于 2011-11-27T20:21:24.787 回答
1
def x():
   print "Hello, World!"

将执行print并返回None- 额外的换行符由您生成printNone打印,因为您写了print x():)

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

def x():
   sys.stdout.write("Hello, World!")
于 2011-11-27T20:23:44.740 回答