如何在Python中缩进for循环生成的打印输出?
我的代码是这样的如何在Python中缩进for循环生成的打印输出?,python,Python,我的代码是这样的 jlist=[1] 对于jlist中的j: 打印(f'working on section{j}') ilist=[1,2] 对于ilist中的i: 方法(一) 哪一个产生产出 working on section 1 result from item 1 result from item 2 但我希望它是这样的: working on section 1 result from item 1 result from item 2 我宁愿不必修改类方法 谢
jlist=[1]
对于jlist中的j:
打印(f'working on section{j}')
ilist=[1,2]
对于ilist中的i:
方法(一)
哪一个产生产出
working on section 1
result from item 1
result from item 2
但我希望它是这样的:
working on section 1
result from item 1
result from item 2
我宁愿不必修改类方法
谢谢您可以通过在不换行的情况下打印缩进来添加缩进:
for i in ilist:
print(' ', end='', flush=True)
我还添加了flush=True
,以确保在classObject.method(I)
我假设输出中的额外换行符是偶然出现的。如果没有,您需要截取
sys.stdout
,这将变得更加复杂。如果您确定您的方法总是只打印一行,那么使用@wjandrea答案中的代码
for i in ilist:
print('\t' + classObject.method(i))
如果您的方法中可能有多种print
用法,那么它会变得稍微复杂一些。但我们可以通过临时用自己的版本替换print
来完成这项任务
让我们用一个简单的例子
def do_something(value):
print(f'The value: {value}')
print('HEADER')
for item in ['Monty', 'Python']:
do_something(item)
print('FOOTER')
这将输出
HEADER
The value: Monty
The value: Python
FOOTER
现在我们添加了一个自己的函数print\u indented
,它将取代内置的print
函数。在新函数中,我们调用内置的print
,但在第一个值(如果存在)之前添加两个空格
在调用do_something
之前,我们用函数替换print
,并在调用后将其设置回原来的位置
def print_indented(*args, **kwargs):
if not args:
__builtins__.print()
else:
__builtins__.print(' ' + args[0], args[1:], kwargs)
def do_something(value):
print(f'The value: {value}')
print('HEADER')
for item in ['Monty', 'Python']:
print = print_indented
do_something(item)
print = __builtins__.print
print('FOOTER')
结果
HEADER
The value: Monty
The value: Python
FOOTER
注意:这是一个简单的方法。有很多方法可以通过上下文管理器和装饰器来优化它
要详细说明
内置打印的用法:为什么不在函数缩进打印中使用print
?在我们进入函数print\u indented
之前,我们将print
完全替换为该函数。这意味着,函数将调用自身。。。一次又一次,直到我们得到一个递归错误。因此,对于\uuuu内置的
我们确保使用Python核心提供的print
。简单的答案是将缩进直接添加到print()
。从注释来看,这是在类对象中。方法(i)
调用:
print(' ', ...)
其中,…
是您正在打印的内容。您只需在对账单中添加空格,对吗?请给出一个答案。您当前的示例缺少一些声明。这很可能会打印“无”。OP遗漏了一些细节,但我认为classObject.method(I))
有一个print()
调用,没有返回。如果您能解释为什么您的代码示例是解决方案,那就太好了。与其只删除几行代码,提供上下文和解释确实有助于每个人理解您的解决方案。@code Producer也可以返回,我们不确定。@Surya确实如此。在这是一个有效的答案之前,我们需要澄清。@HermanAutore那么为什么不尝试将“\t”添加到类method调用的print函数中?我尝试了您的建议,但没有成功。我也用flush=False
试过了。额外的换行是错误的,但是classObject.method()
的打印输出是多行的。我不是CS专家,但据我所知,在打印东西之前,它们要经过类似sys.stdout
的过程。如果我可以捕获for循环生成的所有字符串,那么我可以使用内置函数缩进它们。
print(' ', ...)