为了账号安全,请及时绑定邮箱和手机立即绑定

在 .format() 中使用函数时出现类型错误

在 .format() 中使用函数时出现类型错误

呼啦一阵风 2021-07-29 15:23:47
我正在学习 Python the Hard Way 练习 24,同时将他们在书中使用的所有旧样式格式 (%) 转换为我喜欢的新样式 (.format())。正如你在下面的代码中看到的,如果我分配一个变量“p”,我可以成功地解包函数返回的元组值。但是当我直接使用该返回值时,它会抛出一个 TypeError。def secret_formula(started):    jelly_beans = started * 500    jars = jelly_beans / 1000    crates = jars / 100    return jelly_beans, jars, cratesstart_point = 10000#Old styleprint("We'd have %d beans, %d jars, and %d crates." % secret_formula(start_point))#New style that worksprint("We'd have {p[0]:.0f} beans, {p[1]:.0f} jars, and {p[2]:.0f} crates.".format(p=secret_formula(start_point)))#This doesn't work:print("We'd have {0:.0f} beans, {1:.0f} jars, and {2:.0f} crates.".format(secret_formula(start_point)))抛出错误:Traceback (most recent call last):      File "ex.py", line 16, in <module>        print("We'd have {0:.0f} beans, {1:.0f} jars, and {2:.0f} crates.".format(secret_formula(start_point)))    TypeError: unsupported format string passed to tuple.__format__有人可以解释为什么在 .format() 中直接使用函数不起作用吗?如何将其转换为 f 字符串?
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

将secret_formulato的返回值按format位置传递并不比通过关键字传递更直接。无论哪种方式,您都将返回值作为单个参数传递。


要访问参数的元素,当你将它作为p关键字参数,使用p[0],p[1]和p[2]。同样,经过论证位置上的时候,你就必须访问元素0[0],0[1]和0[2],指定位置0。(这是专门str.format处理格式占位符的方式,而不是正常的 Python 索引语法):


print("We'd have {0[0]:.0f} beans, {0[1]:.0f} jars, and {0[2]:.0f} crates.".format(

      secret_formula(start_point)))

但是,使用解压缩返回值*,将元素作为单独的参数传递会更简单和更传统:


print("We'd have {0:.0f} beans, {1:.0f} jars, and {2:.0f} crates.".format(

      *secret_formula(start_point)))


查看完整回答
反对 回复 2021-08-03
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信