为什么 .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()
returns 一个元组,就 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
,但你只提供了一个(这是一个双元素元组,但它仍然是one 参数)。
另一方面,%
operator 需要 一个单独的元组作为它的右手参数,所以没问题。您可以使用前缀星号运算符解压缩您的元组:
b = ball(100)
print("py ball: {}, u ball: {}".format(*b))
ball()
的 return 值是单个值 - 元组。
当您调用 "...".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
我写的代码:
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()
returns 一个元组,就 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
,但你只提供了一个(这是一个双元素元组,但它仍然是one 参数)。
另一方面,%
operator 需要 一个单独的元组作为它的右手参数,所以没问题。您可以使用前缀星号运算符解压缩您的元组:
b = ball(100)
print("py ball: {}, u ball: {}".format(*b))
ball()
的 return 值是单个值 - 元组。
当您调用 "...".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