我写的代码:
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
ball()
的返回值是一个值—一个元组。你知道吗当您调用
"...".format(ball(100))
时,您将单个值传递给最终需要两个值的函数。你知道吗当您调用
"..." % ball(100)
时,您正在向%
操作符提供一个元组,它需要一个元组!你知道吗毫不奇怪,它在第二种情况下有效,在第一种情况下失败。你知道吗
尝试使用splat操作符将元组展平到
.format
调用的参数中,或者尝试自己展开元组,或者尝试在.format
调用中使用命名参数访问:str.format()
为每个槽接受单独的参数,而%
接受元组或单个值。ball()
返回一个元组,就str.format()
而言,这只是一个参数。因为您的模板有2个插槽,所以第二个插槽缺少一个参数。你知道吗您有两个选项:要么接受
.format()
的单个参数并使用格式化指令提取嵌套元素,要么将元组作为单独的参数传入。你知道吗后者可以通过
*expr
调用表示法完成:但是格式化规范还允许您处理元组元素:
我在这里使用显式编号表示只需要一个参数,在位置
0
;0[0]
取元组的第一个元素,0[1]
取第二个元素。你知道吗格式字符串需要两个
.format
参数,但只提供一个(这是一个两元素元组,但仍然是一个参数)。 另一方面,%
操作符需要一个元组作为它的右参数,因此是可以的。您可以使用前缀星号运算符解压缩元组:相关问题 更多 >
编程相关推荐