5

これはおそらく私が見逃しているばかげたものですが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'
>>> 
4

3 に答える 3

8

print x()x()暗黙的に返される値を出力しますNone

と置き換えるか、print "Hello world"return "Hello world"置き換えるかのいずれかprint x()x()

于 2011-11-27T20:20:56.777 に答える
3

2つのこと:

まず、特に指定しない限り、printは自動的に新しい行を追加します。新しい行が必要ない場合は、コンマを追加します。

print "Hello, World!",

次に、Noneであるx()関数の戻り値を出力しています。関数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 に答える