Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中缩进for循环生成的打印输出?_Python - Fatal编程技术网

如何在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('    ', ...)