打印命令用逗号?

时间:2013-10-31 14:50:35

标签: python printing edit

我一直在阅读,在打印命令的末尾添加一个逗号,水平而不是垂直地列出函数的所有输出字符串。但不知何故,我的格式化不允许我这样做

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]),

3 个答案:

答案 0 :(得分:3)

这可能是因为你正在处理字符串,并且在它的末尾或者在开头有一个\n字符。可以肯定的是,没有开始或拖尾的空格,请使用strip()。所以:

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

这是假设你的函数返回的东西,否则,上面的例子将不起作用。如果Y是全局的,并且您的函数实际上更改了一个全局变量:

for var in Y:
    print var,

答案 1 :(得分:0)

foo函数必须返回一个最后带换行符的字符串。尝试:

print foo(Y).rstrip(),

如果您尝试此操作并且在看到输出时遇到NoneType错误,则必须在您的函数内部进行打印,而不是使用此print语句。逗号只能影响该特定语句,而不能影响函数内部的语句。在函数内搜索并删除print或将逗号放在内部语句中。或者return要打印的值,然后在外部打印。

答案 2 :(得分: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.