我一直在阅读,在打印命令的末尾添加一个逗号,水平而不是垂直地列出函数的所有输出字符串。但不知何故,我的格式化不允许我这样做
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]),
答案 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.