2009-07-27 14 views

答えて

4

あなたが好きと呼ばれる(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サイトを参照するか、これを使用する方法の詳細については検索を参照)を使用して、数字の書式を設定することができます。

1

あなたはフォーマット文字列にthe % operatorstr.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 
+0

はい、私は、すべての入力でこれを入力する必要がありますする必要はありません。セッション全体に同じ書式が必要なので、もう一度それを設定したいと思います。 –

+0

申し訳ありませんが、あなたの質問を正しく読まなかった。私のできる限り、質問を適切にカバーする答えを広げました。 –

1

フム...定義についてどのように

それは100%の解決策ではないのですが、これは私の心になってきた...

floatのサブクラスで、オーバーライドされた __str__メソッド(exp表記で出力する)を持ちます。そして、このクラスのオブジェクト構築ですべての式をラップする必要があります)。 それはデイブのソリューションよりも少し短くなり、あなたは一度クラスを定義してからのようなものを記述します。

>>> F(1.e12) 
1.0e+12 
>>> F(3.) 
3.0e+0 
>>> F(1.+2.+3.+4.) 
1.0e+1 
... 
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' 
関連する問題