2015-02-10 1 views
0

Я уже искал, но я понятия не имею, как эти e и j называются и, следовательно, не найдены полезной информацией. Я ищу номера с символами для спецификации или как операторы.Как создать нечто вроде экспоненты 'e' или мнимого 'j'

Как это exponetial e notaion:

1e3 = 1 * 10^(3) = 1000 
xen = x * 10^(n)   # where x and n are numbers 

или мнимые числа с j:

1 + 3j 

Выгода Я надеюсь на это, чтобы иметь возможность написать Ppm(2) (экземпляр Ppm класса) удобно как 2ppm (где «ppm» представляет собой «части на миллион» частоты в ЯМР). Это невозможно сделать с помощью экспоненциальной нотации 2e-6, поскольку ppm ссылается на частоту. Следовательно, его следует отличать от обычных чисел.

+0

Я не думаю, что это возможно без изменения исходного кода Python. Цифрный буквенный синтаксис, такой как '3j' и' 1e3', эффективно кодируется в синтаксический анализатор. Расширение анализатора, чтобы распознать '2ppm' как литерал, также недоступно обычным пользователям. – Kevin

+0

Они не называются «; они являются частью синтаксиса для чисел с плавающей точкой и сложными числами. Невозможно распространить это на пользовательские классы. Python не Ruby (хотя я не специалист по Ruby, поэтому не могу сказать, можно ли там там). –

+0

'e' - [математическая константа] (https://docs.python.org/2/library/math.html#constants); мнимые числа являются [частью синтаксиса букв числа] (https://docs.python.org/2/reference/lexical_analysis.html#imaginary-literals). Ни один из них не называется. Вы не можете изменить грамматику Python (по крайней мере, не во время выполнения, и вам придется скомпилировать свой собственный двоичный код Python, если вы попытаетесь изменить грамматику). –

ответ

3

Нет, python не поддерживает определенные пользователем литералы.

+3

Вы можете приблизиться к 'ppm = Ppm (1); x = 2 * ppm' – Eric

+0

@ Эрик, предполагающий ['Ppm .__ rmul__'] (https://docs.python.org/2/reference/datamodel.html#object.__rmul__), правильно реализован! – jonrsharpe

+1

Или с модулем forbiddenfruit, '(2) .ppm' – Eric