Frage Python: eval (), das Werte in Fließkomma-Werte umwandelt?


Gibt es eine Möglichkeit, ein evalähnliche Funktion, die ihre Werte auf Fließkomma umwandelt? Ich hoffe es

eval('1/3')

und lassen Sie den Fließkommawert .333333 lieber als den Ganzzahlwert 0 zurückgeben.


8
2018-02-23 05:23


Ursprung


Antworten:


Besorgen Sie sich das Compiler-Flag für __future__.divisionÜbergeben Sie es und Ihren Code an compile(), dann renne eval() auf das zurückgegebene Codeobjekt.

(Notiz von mh) Dies hat den zusätzlichen Vorteil, dass die Divisionsoperation global nicht geändert wird, was unerwartete Nebenwirkungen haben kann. (Endnote)

>>> import __future__
>>> eval(compile('1/3', '<string>', 'eval', __future__.division.compiler_flag))
0.33333333333333331

15
2018-02-23 05:26



Du fragst wirklich: Wie kann ich Python dazu bringen, die Gleitkommadivision standardmäßig auszuführen? Die Antwort ist:

from __future__ import division

6
2018-02-23 05:26



Das Problem besteht darin, dass im Ausdruck kein Gleitkommawert vorhanden ist.

Versuche dies eval('1/3.0')


3
2018-02-23 05:26



Dies funktioniert standardmäßig auf Python3

Python 3.2 (r32:88445, Dec  8 2011, 15:26:51) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> eval("1/3")
0.3333333333333333

Für Python2 kannst du bestehen -Qnew in der Befehlszeile (was äquivalent zu from __future__ import division

$ python -Qnew
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> eval("1/3")
0.3333333333333333

2
2018-02-23 05:43



Basierend auf Lafadas Antwort erhalten Sie die Eingabezeichenfolge von einer Variablen:

>>> string = '1/3'
>>> print eval(string+'.0')
0.333333333333

1
2018-04-26 00:21