Вопрос

Я переношу свой проект с Python 2.6 на Python 2.4 и 2.5.В своем проекте я использовал float("inf"), и теперь я нахожу, что он недоступен на Python 2.5.Есть ли у него резервная копия?

Это было полезно?

Решение 4

Я создал бэкпорт, протестированный на Python 2.5+, и, вероятно, его можно легко заставить работать на Python 2.4:

https://github.com/cool-RR/GarlicSim/blob/master/garlicsim/garlicsim/general_misc/infinity.py

Другие советы

Написание этого слова либо длинным, либо коротким способом для меня прекрасно работает:

$ python2.4 -c "print float('inf')+200"
inf
$ python2.5 -c "print float('inf')+200"
inf
$ python2.5 -c "print float('infinity')+200"
inf
$ python2.4 -c "print float('infinity')+200"
inf

Тот самый -c флаг означает "выполнить следующие аргументы как команду Python".

ПЕП754 (который был отклонен) упоминает вашу проблему о специальных значениях IEEE-754.Он предлагает использовать что-то вроде 1e300000 чтобы сгенерировать переполнение с плавающей запятой и создать inf, но он отмечает, что это некрасиво и не гарантирует переносимости.

Вы сможете подделать это, предоставив вместо этого Python достаточно большую константу с плавающей запятой.Например:

>>> 1e100000
inf
>>> float('inf') == 1e1000000
True
>>> float('inf') == 2e1000000
True

Тот самый десятичная дробь модуль доступен начиная с Python 2.4 и поддерживает положительные или отрицательные бесконечные десятичные дроби.Он не всегда ведет себя как поплавок (например.добавление десятичной дроби и числа с плавающей точкой не поддерживается), но делает правильную вещь для сравнения, которая была достаточно хороша для меня.

>>> decimal.Decimal('Infinity') > 1e300
True

Заимствование NumPy на несколько строк:

import numpy as np

inf = float(np.inf)

Здесь, inf это обычный питон float, так что вам больше не нужно возиться с NumPy.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top