gpt4 book ai didi

python - 对于看似相同的列表,格式有不同的行为

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:23 24 4
gpt4 key购买 nike

我有以下 python 命令:

>>> list([0, 1])
[0, 1]
>>> list(myobject)
[0, 1]
>>> print(['{:.2f}'.format(val) for val in list([0, 1])])
['0.00', '1.00']
>>> print(['{:.2f}'.format(val) for val in list(myobject)])
TypeError: non-empty format string passed to object.__format__

为什么list([0, 1])list(myobject)返回相同的列表[0, 1] code>,格式化一个可以工作,而格式化另一个则不行?

如果有帮助的话,有问题的myobject是一个sympy.geometry.Point

最佳答案

仅仅因为列表中的值以相同的方式打印并不意味着它们可以以相同的方式格式化。 sympy.geometry.Point 包含 sympy.core.number.* objects ,不是 Python 数字:

>>> from sympy import Point3D
>>> myobject = Point3D(1, 2, 2)
>>> type(myobject.x)
<class 'sympy.core.numbers.One'>

这会起作用:

>>> print(['{!r}.00'.format(val) for val in myobject])

因为然后您首先对 myobject 中的每个值应用 repr() 。以下内容也将起作用,但随后将应用任意对象的标准格式:

>>> print(['{}.00'.format(val) for val in myobject])

(我在两个示例中删除了 list() 调用,因为它在这里是多余的)。

myobject 生成的值可能有一个自定义的 __repr__ 方法,该方法将值作为字符串数字返回。它们缺少的是自定义的 __format__ 方法,并且继承的默认的 object.__format__ 拒绝接受格式化参数。

要实际将对象格式化为 float ,请先将它们转换为:

print(['{:.2f}'.format(float(val)) for val in myobject])

演示:

>>> print(['{!r}.00'.format(val) for val in myobject])
['1.00', '2.00', '2.00']
>>> print(['{}.00'.format(val) for val in myobject])
['1.00', '2.00', '2.00']
>>> print(['{:.2f}'.format(float(val)) for val in myobject])
['1.00', '2.00', '2.00']

关于python - 对于看似相同的列表,格式有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com