2012-02-23 9 views

cevap

15

tut __future__.division için derleyici bayrak, döndürülen kod nesne üzerinde eval() çalıştırmak sonra, compile() onu ve kodunuzu geçmektedir.

(note by mh) Bu, beklenmedik yan etkilere sahip olabilecek, bölme işleminin global olarak değiştirilmemesi avantajına sahiptir. (son not)

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

Bu tam olarak ihtiyacım olan şey. Özellikle iyi olan, programın diğer kısımlarında beklenmedik yan etkilere sahip olabilecek küresel ortamı değiştirmemesidir. Derlemenizin işaretini ve kullanımını açıkça göstermek için örneğinizi güncelleyeceğim. Teşekkürler!! –

+0

Oh, bu sevimli, sadece bunu gördüm. :-) – kindall

+0

Ondalık basamakları ikiye sınırlayabilir miyim? – Jim

6

Sen soru dönmek zorunda am gerçekten: Ben Python varsayılan olarak nokta bölme kayan yapmak nasıl alacağınızı öğrenebilirsiniz. Cevap:

from __future__ import division 
+0

aslında hayır, sadece girilen ifadenin değerlendirilmesi için bunu açmak istiyorum. Ancak, bunu yapamamak, bu sadece iyi çalışır. Teşekkürler! –

+0

'__future__' ayarları modül başınadır, böylece ayrı bir modülde yapabilirsiniz, ancak Ignacio'nun yolu daha iyidir. – kindall

2

sorun ekspresyonunda bir reel değer olmasıdır.

bu eval('1/3.0') Bu Python3 varsayılan olarak çalışır

2

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 

Python2 için, Lafada en dayanarak 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 
1

eşdeğerdir hangi (komut satırında -Qnew geçebilir deneyin Eğer giriş dizesini bir değişkenden alıyorsanız:

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

Dizgisi = (1/3) 'gibi ifadelerde başarısız olur. – Dilawar

+0

'string = (1/3)' ifadesi, bir dize oluşturmuyor. 1/3'ü hesaplar, 0'lık bir tamsayı sonucu üretir ve sonucu string olarak adlandırılan bir değişkende saklar. Öyleyse, eval (string + '. 0'), '' .0'' dizgisi ile tamsayı sıfırı birleştirmeye çalışacaktır. Girişiniz önceden bir tam sayı olarak değerlendirilmemiş olan gerçek bir dizeyse işe yarayacaktır. – Knowbody