0

print コマンドの最後にコンマを追加すると、関数に対して出力されたすべての文字列が垂直ではなく水平にリストされることを読んでいます。しかし、どういうわけか私のフォーマットではこれができません

def foo(Y):
...
...
print foo(Y),

これはまだ私に与えます

a
b
c

それ以外の

a b c

編集:私の特定の関数は、別の関数で反復的です

def encode(Y):
    for i in range(0, len(Y), 2):
        encode_pair(Y[i], Y[i+1]),
4

3 に答える 3

3

これはおそらく、文字列を処理していて、\nその末尾または先頭に文字があるためです。先頭または末尾の空白がないことを確認するには、 を使用しますstrip()。そう:

print str(foo(Y)).strip()

これは、関数が何かを返すことを前提としています。そうでない場合、上記の例は機能しません。Y がグローバルで、関数が実際にグローバル変数を変更する場合:

for var in Y:
    print var,
于 2013-10-31T14:58:19.820 に答える
0

あなたの関数は印刷するだけのようです。したがって、それを変更する必要があります。それができない場合は、stdout一時的にリダイレクトする必要があります。

import cStringIO
import sys
buf = cStringIO.StringIO()

sys.stdout = buf
*do your printing calls*
sys.stdout = sys.__stdout__

output = buf.getvalue()
# This is now a string with all the output.

print output.replace('\n', ' ') # Output it with line breaks replaced with spaces.

そのようなことをもっと頻繁に行うと、次のことができます

import contextlib
@contextlib.contextmanager
def redir_stdout(temptarget):
    import sys
    try:
        t = sys.stdout
        sys.stdout = temptarget
        yield None
    finally:
        sys.stdout = t

その後

import cStringIO
buf = cStringIO.StringIO()

with redir_stdout(buf):
    *do your printing calls*

output = buf.getvalue()
# This is now a string with all the output.    
于 2013-10-31T15:25:22.837 に答える
0

関数はfoo、最後に改行を含む文字列を返す必要があります。試す:

print foo(Y).rstrip(),

これを試しても outputNoneTypeが表示されているのにエラーが発生する場合は、このステートメントではなく、関数内で印刷が行われている必要があります。コンマはその特定のステートメントにのみ影響し、関数内のステートメントには影響しません。関数内を検索して削除するか、内部ステートメントにカンマを置きます。または、印刷したい値を代わりに外部に印刷します。printprintreturn

于 2013-10-31T14:54:43.970 に答える