我有以下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]
,在格式化一个作品,而在格式化其他不?
如果有帮助,则myobject
问题是sympy.geometry.Point
仅仅因为列表中的值以相同的方式打印并不意味着它们可以以相同的方式设置格式。sympy.geometry.Point
包含sympy.core.number.*
对象,而不是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])
因为然后您将首先应用repr()
每个值myobject
。以下内容也将起作用,但是随后将对任意对象应用标准格式:
>>> print(['{}.00'.format(val) for val in myobject])
(我list()
在两个示例中都删除了该调用,因为在这里是多余的)。
由产生的值myobject
可能有一个自定义__repr__
方法,该方法以字符串数字形式返回该值。他们缺少的是一个自定义__format__
方法,object.__format__
然后继承的默认值拒绝接受格式设置参数。
要将对象实际格式化为浮点型,请先将其转换:
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']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句