Более простая версия без библиотек
Ой, черт возьми - я добавлю простую версию без библиотек.Не стесняйтесь улучшать его [*]:
def frange(start=0, stop=1, jump=0.1):
nsteps = int((stop-start)/jump)
dy = stop-start
# f(i) goes from start to stop as i goes from 0 to nsteps
return [start + float(i)*dy/nsteps for i in range(nsteps)]
Основная идея заключается в том, что nsteps
- это количество шагов, которые помогут вам от начала и до конца, а range(nsteps)
всегда выдает целые числа, чтобы не было потерьточности.Последний шаг - отобразить [0..nsteps] линейно на [start..stop].
edit
Если, как alancalvitti , вы хотите сериючтобы получить точное рациональное представление, вы всегда можете использовать Fractions :
from fractions import Fraction
def rrange(start=0, stop=1, jump=0.1):
nsteps = int((stop-start)/jump)
return [Fraction(i, nsteps) for i in range(nsteps)]
[*] В частности, frange()
возвращает список, а не генератор.Но этого хватило для моих нужд.