1

我想知道是否有办法在打印语句中解压缩值,就像在函数中解压缩参数一样f

这有效:

import numpy
er = numpy.array([0.36666667, 0.46666667, 0.43333333, numpy.nan])
l = 0.8
print('%0.3f | %0.3f | %0.3f | %0.3f | %0.1f' % (er[0], er[1], er[2], er[3], l))
# 0.367 | 0.467 | 0.433 | nan | 0.8

但是,我想避免使用多个er[x],而是使用如下所示*er的内容:

def f(a,b,c,d):
    return True
print(f(*er))
# True

我试过了:

#print('%0.3f | %0.3f | %0.3f | %0.3f | %0.1f' % (*(er, numpy.array([l]))))

但是最后一行会生成“SyntaxError:无效语法”错误。

有任何想法吗?

4

3 回答 3

4

由于您需要特定格式,因此您可以执行以下操作,允许定义分隔符 ( ' | ') 以及格式化单个值 ( {:.3f}):

print(' | '.join(['{:.3f}'.format(x) for x in er]))

向其中添加值是微不足道的:

print(' | '.join(['{:.3f}'.format(x) for x in er]) + ' | {:.1f}'.format(l))

请注意,str.join()当提供list而不是生成器表达式时,执行速度会更快。

于 2017-06-06T08:13:58.410 回答
2
print('{:.3f} | {:.3f} | {:.3f} | {:.1f} | {:.3f}'.format(*(list(er) + [l])))

在打开包装之前,请确保所有 args 都在一个地方。

于 2017-06-06T08:10:11.050 回答
1

你不想解压任何东西,因为你想要一个 tuple after %

print('%0.3f | %0.3f | %0.3f | %0.3f | %0.1f' % (tuple(er) + (1,)))
0.367 | 0.467 | 0.433 | nan | 1.0

但你最好使用str.format. 解包在这里很有意义,因为您希望将每个数组项作为参数传递给函数。

print('{:0.3f} | {:0.3f} | {:0.3f} | {:0.3f} | {:0.1f}'.format(*er, 1))
0.367 | 0.467 | 0.433 | nan | 1.0
于 2017-06-06T08:46:18.703 回答