2016-07-23 1 views
1

По моему 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__, так как это делает не отображаются в списках? Если это не очень хорошая идея.

+0

Исключение, которое вы получаете, предполагает, что ожидается, что '__float__' вернет одно значение float и что выполнение чего-то другого неприемлемо. См. [Docs] (https://docs.python.org/3/reference/datamodel.html?highlight=__float__#object.__complex__). – Blckknght

+0

Глядя на ваш смысл и (пока еще пустой) класс 'multioperalist': надеюсь, вы не пытаетесь повторно изобрести numpy, но делаете это как упражнение. – Evert

+0

@Evert Я не, не волнуйся. Это просто понять, как работает все это. – bjd2385

ответ

1

К сожалению, вы не можете. Я не могу найти точную формулировку по этому вопросу, но the documentation states:

Вызывается для реализации встроенных функций комплекса(), Int(), поплавок() и круглые(). Должно вернуть значение соответствующего типа.

я прочитал, что в этом __float__() должен возвращать float, так как float():

[г] eturn [с] число с плавающей точкой построены из числа или строки х.


Для сравнения, NumPy также не делает этого. Вместо этого он имеет способ astype(<type>) к его ndarray, который преобразуется в конкретный <type>.
Это подтверждает мне, что этого не может быть сделано.

+0

Хорошо, это имеет смысл. И, кроме того, для записи я определенно не стараюсь воссоздать NumPy lol. Это просто здорово, ничего больше – bjd2385

Смежные вопросы