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

Sak*_*n55 3 python string-formatting python-3.x

我写的代码:

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)))
Run Code Online (Sandbox Code Playgroud)

当我使用时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))
Run Code Online (Sandbox Code Playgroud)

它工作正常并产生:

py ball: 500, u ball: 50
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

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

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

后者可以使用*exprcall notation完成:

print("py ball: {}, u ball: {}".format(*ball(100)))
Run Code Online (Sandbox Code Playgroud)

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

print("py ball: {0[0]}, u ball: {0[1]}".format(ball(100)))
Run Code Online (Sandbox Code Playgroud)

我在这里使用显式编号来表明只有一个参数在预期位置0; 0[0]获取元组的第一个元素,0[1]取第二个元素.