私はしばしば、迅速な数値計算を行うためにPythonインタプリタを使用し、すべての数値結果を、例えば指数表記を使用して自動的に印刷したいと思います。これをセッション全体に設定する方法はありますか?Pythonインタプリタで数値書式を制御するにはどうすればよいですか?
例えば、私がしたい:
>>> 1.e12
1.0e+12
ない:
>>> 1.e12
1000000000000.0
私はしばしば、迅速な数値計算を行うためにPythonインタプリタを使用し、すべての数値結果を、例えば指数表記を使用して自動的に印刷したいと思います。これをセッション全体に設定する方法はありますか?Pythonインタプリタで数値書式を制御するにはどうすればよいですか?
例えば、私がしたい:
>>> 1.e12
1.0e+12
ない:
>>> 1.e12
1000000000000.0
あなたが好きと呼ばれる(mystartup.py
言う)と、その後に環境変数PYTHONSTARTUP
を設定するPythonスクリプトを作成します。このスクリプトのパス。 Pythonは、対話型セッションの起動時にこのスクリプトをロードします(ただし、スクリプトの実行時は実行しません)。インタラクティブセッションで、その後
def _(v):
if type(v) == type(0.0):
print "%e" % v
else:
print v
:このスクリプトでは、これと同様の機能を定義したいwhaetver
もちろんC:\temp>set PYTHONSTARTUP=mystartup.py C:\temp>python ActivePython 2.5.2.2 (ActiveState Software Inc.) based on Python 2.5.2 (r252:60911, Mar 27 2008, 17:57:18) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> _(1e12) 1.000000e+012 >>> _(14) 14 >>> _(14.0) 1.400000e+001 >>>
、あなたが呼び出される関数を定義することができますし、正確に動作するようにしかし、あなたが欲しい。
これよりもさらにIPythonを使用すると便利です。これは素晴らしいことです。result_display.when_type(some_type)(my_print_func)
(IPythonサイトを参照するか、これを使用する方法の詳細については検索を参照)を使用して、数字の書式を設定することができます。
あなたはフォーマット文字列にthe %
operatorかstr.format
を使用することができます知っているように:たとえば
:
>>> "%e" % 1.e12
'1.000000e+12'
あなたは書式設定を変更するには、内蔵float
クラスをmonkey patchことができれば、私は思っていたが、それはPythonはあなたをさせませんようだ:
>>> 1.e12.__class__.__repr__ = lambda x: "%e" % x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'float'
だから私は考えることができる唯一の他の事はあなた自身を書くことです出力をキャプチャし、再フォーマットし、標準出力に送信するファイルライクなオブジェクトです。あなたは、このオブジェクトにインタプリタの標準出力をリダイレクトしたい:
sys.stdout = my_formatting_object
フム...定義についてどのように
それは100%の解決策ではないのですが、これは私の心になってきた...
floatのサブクラスで、オーバーライドされた__str__
メソッド(exp表記で出力する)を持ちます。そして、このクラスのオブジェクト構築ですべての式をラップする必要があります)。 それはデイブのソリューションよりも少し短くなり、あなたは一度クラスを定義してからのようなものを記述します。
>>> F(1.e12)
1.0e+12
>>> F(3.)
3.0e+0
>>> F(1.+2.+3.+4.)
1.0e+1
...
上記のDave Webbのヒントに基づいて作成してください。もちろん、好きなときに精度を設定したり( "%.3e")、必要に応じて書き込み行を上書きすることもできます。
import os
import sys
class ExpFloatFileObject:
def write(self, s):
try:
s = "%e"%float(s)
except ValueError:
pass
sys.__stdout__.write(s)
def __getattr__(self, name):
return getattr(sys.__stdout__, name)
sys.stdout = ExpFloatFileObject()
と使用方法:
>>> 14000
1.400000e+04
>>> "text"
'text'
はい、私は、すべての入力でこれを入力する必要がありますする必要はありません。セッション全体に同じ書式が必要なので、もう一度それを設定したいと思います。 –
申し訳ありませんが、あなたの質問を正しく読まなかった。私のできる限り、質問を適切にカバーする答えを広げました。 –