По моему question from earlier today (который был чудесно ответил, и я ценю понимание каждого), у меня есть extended that small class для этого почти для всех операций, которые мы обычно выполняем для целых чисел и поплавков.Используйте __float__ с неплавающим типом
Теперь я не уверен, как преобразовать все записи в поплавки безlist comprehensions.
Например, прямо сейчас у меня есть следующие:
def __float__(self):
return operalist(float(i) for i in self)
Но когда я звоню следующую последовательность команд:
>>> from operalist import operalist
>>> X = operalist(range(1, 11))
>>> X
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> float(X)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __float__ returned non-float (type operalist)
То, что я предпочел бы видеть то, что мы получаем от используя список понимание:
>>> [float(i) for i in X]
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
Как добавить метод __float__
, так как это делает не отображаются в списках? Если это не очень хорошая идея.
Исключение, которое вы получаете, предполагает, что ожидается, что '__float__' вернет одно значение float и что выполнение чего-то другого неприемлемо. См. [Docs] (https://docs.python.org/3/reference/datamodel.html?highlight=__float__#object.__complex__). – Blckknght
Глядя на ваш смысл и (пока еще пустой) класс 'multioperalist': надеюсь, вы не пытаетесь повторно изобрести numpy, но делаете это как упражнение. – Evert
@Evert Я не, не волнуйся. Это просто понять, как работает все это. – bjd2385