繁体   English   中英

为什么.format(function())不起作用,但%打印该值?

[英]Why does .format(function()) not work, but % prints the value?

我写的代码:

def ball(f):  
    py_ball = f * 5
    u_ball = py_ball / 10  
    return py_ball, u_ball
print("py ball: {}, u ball: {}".format(ball(100)))

当我使用str.format ,它会抛出异常:

Traceback (most recent call last):
  File "rear.py", line 5, in 
    print("py ball: {}, u ball: {}".format(ball(100)))
IndexError: tuple index out of range

但如果我使用%格式:

print("py ball: %d, u ball: %d" % ball(100))

它工作正常并产生:

py ball: 500, u ball: 50

str.format()为每个插槽采用单独的参数 ,而%接受元组或单个值。 ball()返回一个元组,就str.format()而言,这是一个单独的参数。 由于您的模板有2个插槽,因此第二个插槽缺少一个参数。

您有两个选择:接受.format()的单个参数,并使用格式化指令来提取嵌套元素,或者将元组作为单独的参数传递。

后者可以使用*expr调用表示法完成:

print("py ball: {}, u ball: {}".format(*ball(100)))

但格式规范还允许您解决元组元素:

print("py ball: {0[0]}, u ball: {0[1]}".format(ball(100)))

我在这里使用显式编号来表示在位置0中只需要一个参数; 0[0]取元组的第一个元素, 0[1]取第二个元素。

您的格式字符串需要两个 .format参数,但您只提供一个(这是一个双元素元组,但它仍然是一个参数)。 另一方面, %运算符需要一个元组作为其右手参数,所以没关系。 您可以使用前缀星号运算符解压缩您的元组:

b = ball(100)
print("py ball: {}, u ball: {}".format(*b))

ball()的返回值是单个值 - 元组。

当您调用"...".format(ball(100))您将该单个值传递给最终需要两个值的函数。

当你调用"..." % ball(100)你要向%运算符提供一个元组,它需要一个元组!

毫不奇怪,它适用于第二种情况,并在第一种情况下失败。

尝试使用splat运算符将元组展平为调用.format的参数,或者尝试自己扩展元组,或尝试在.format调用中使用命名参数访问:

ball100 = ball(100)

"py ball: {}, u ball: {}".format(*ball100)   # splat! Flatten the tuple

"py ball: {}, u ball: {}".format(ball100[0], ball100[1]) # DIY

"py ball: {ball[0]}, u ball: {ball[1]}".format(ball=ball100) # named arg

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM