2009-03-11 16 views
155

私は現在、Pythonシェルでの計算を行っています。私が望むのは、ポイントまで定義されたすべての変数を見ることができるMatlabスタイルのリストアウトです(私が使用した名前、その値などを知っています)。定義済みのすべての変数を表示

方法はありますか?どのようにすればいいですか?値を取得するには

for name in vars().keys(): 
    print(name) 

:名前を取得するには

+0

私は分類社会のルールによっていくつかの構造を寸法設定しています。だから、厚さはすべてt、長さLなどです。そして、時には彼らはお互いを呼び出すので、第7章2.4.4で使用されています。 3.2.2のtを使用します。一回限りの計算なので、私はpyを対話的なシェルとして使うだけです。 – Rook

+2

完了しました:http://stackoverflow.com/questions/430811/enumerate-or-list-all-variables-in-a-program-of-your-favorite-language-here – Kurt

答えて

24

for value in vars().values(): 
    print(value) 

VARSは()もオブジェクト自体の中で定義されているVARSを見つけるために、オプションの引数を取ります。

10

印刷地方()

編集から続きました。

印刷するとき、それは少しきれいに見えるように:

import sys, pprint 
sys.displayhook = pprint.pprint 
locals() 

あなたに多くの垂直プリントアウトを与える必要があります。

+0

こんにちは。これは機能するかもしれません。比較的「垂直に」印刷する方法がありますか?相次いでそれを洗い流すだけでは、あまり有用ではありません。 – Rook

+0

確かに、これを試してみてください: import sys、pprint sys.displayhook = pprint.pprint locals() – Harold

+0

あまりにもうまくフォーマットされませんでした。私はそれを私の答えに加えます。 – Harold

209

物事のカップルは、あなたが使用することができます:

  • globals()はあなたに
  • locals()はあなたの辞書を与えるグローバル変数の辞書を与える:

    • dir()はあなたにスコープ変数内のリストが表示されますローカル変数
  • 2

    globals()、locals()、vars()、およびdir()がすべてあなたの望みに役立ちます。

    9

    dir()は、すべての現在のインポート、および変数を返します。などvarScore、varNames、など

    あなたは自分の変数をしたい場合、私はDIRから抽出​​しやすい命名規則を示唆しているが、

    そのように、あなたは、単にこれを行うことができます。

    for vars in dir(): 
    if vars.startswith("var"): 
        print vars 
    

    編集

    あなたはすべての変数を一覧表示したいのですが、のようなインポートモジュールと変数除外する場合:

    __builtins__ 
    

    あなたはそうのようなものを使用することができます:あなたが見ることができるように、変数(まあ、タプル)ですので

    import os 
    import re 
    
    x = 11 
    imports = "os","re" 
    
    for vars in dir(): 
        if vars.startswith("__") == 0 and vars not in imports: 
         print vars 
    

    することは、それは、しかし、変数「輸入」と表示されます。簡単な回避策は、 "imports"という単語をインポートタプル自体に追加することです。これはあなたのためのオプションがある場合は

    +1

    うん、いいえ、それは可能ではありません私は恐れています。それらのほとんどはちょうどt、a、c、d、L、p ...などです。 – Rook

    +1

    ああ、小さなプロジェクトは推測していますか?私は一文字変数を使って大規模なプロジェクトを作るのは狂ってしまいます。一度あなたが1k + LOCになると、各変数が何を保持しているのかを覚えなければなりません。 –

    +0

    私の推測では約300pgのレポートになるので、2000年代の変数(これの厚さ、それの厚さ、何かの厚さ、私はそれが何であるかを知らない... :) ...はいそうです。 – Rook

    112

    は、あなたがIPythonで見たいと思うかもしれません:現在定義されているすべての変数のリストを取得するには

    、タイプwho

    In [1]: foo = 'bar' 
    
    In [2]: who 
    foo 
    

    は、あなたがより多くのためにwhosを入力することができます詳細:

    In [3]: whos 
    Variable Type Data/Info 
    ---------------------------- 
    foo  str  bar 
    

    可能な他の機能の富があります - 基本的には、STのPythonインタプリタでありますeroids。一つの便利な1あなたは、セッションの間で変数を保存することができますstoreコマンドです(一種のように超簡単pickle)あなたは数分を持っている場合は、私がチームに関連付けられない方法で午前Jeff Rush's excellent IPython demonstration screencasts:

    をチェックアウト

    IPythonの背後には満足しているユーザーしかいません。

    +9

    +1、しかし投票したいと思っています+10:地元の人以外の変数を削除するIPythonの%()! – EOL

    +5

    この答えは、誰かがIPythonをうまく知らない場合、コマンドが動作するためにオートマチックをオンにする必要があることを知らないので、半分役立ちます。デフォルトでは、マジックコマンドの前に%で始まる必要があります。 '%who' –

    1
    def MyWho(): 
        print [v for v in globals().keys() if not v.startswith('_')] 
    

    これは対話型シェルで定義する必要があります。

    インポートOS、A = 10、インポートSYS、MyWho()は、次に

    [ 'A'、 'MyWho'、 'SYS'、 'OS']

    3

    もう少しスマート(パイソンを与えます3)方法:私はPython 2.7インタプリタで

    def printvars(): 
    
        tmp = globals().copy() 
        [print(k,' : ',v,' type:' , type(v)) for k,v in tmp.items() if not k.startswith('_') and k!='tmp' and k!='In' and k!='Out' and not hasattr(v, '__call__')] 
    
    3

    、MATLABに存在する同じwhosコマンドは、Pythonで存在します。これは、MATLABアナログ(変数名、タイプ、および値/データ)と同じ詳細を示します。

    Pythonインタプリタでは、whosは、 "対話的な名前空間"のすべての変数をリストします。

    28

    RedBlueThingアナログは前記のとおり

    • dir()は、スコープ変数に
    • globals()のリストを与えるグローバル変数の辞書を与える
    • locals()ローカル変数

    の辞書を与えます対話型シェル(バージョン2.6.9)を使用して、変数a = 1およびを作成した後dir()locals()を実行している

    ['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b'] 
    

    を与えて実行するとglobals()を実行

    {'a': 1, 'b': 2, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', '__doc__': None} 
    

    を与えるは、このケースでlocals()と全く同じ答えを与えます。

    私はモジュールに入っていないので、すべての変数はローカル変数とグローバル変数の両方として利用できます。locals()およびglobals()には、変数と名前の値がリストされます。 dir()には名前のみが表示されます。

    モジュールをインポートして、モジュール内にlocals()またはglobals()を実行した場合、dir()はまだ少数の変数しか提供しません。上記の変数に__file__を追加します。 locals()globals()も同じ変数をリストしていますが、__builtin__の辞書値を出力する際に​​は、組み込み関数、例外、およびタイプが「'type': <type 'type'>」ではなく、上記の簡略<module '__builtin__' (built-in)>

    dir()については、ニューメキシコ州テックのPython 2.7 quick referenceまたはibiblio.orgのthe dir() functionを参照してください。およそlocals()globals()ニューメキシコ工科大学のglobalsについて飛び込むPythonとページでlocals and globalsを参照してください

    [コメント:@Kurt:あなたはenumerate-or-list-all-variables-in-a-program-of-your-favorite-language-hereへのリンクを付けましたが、その答えに間違いがあります。その例の問題はtype(name)で、常に<type 'str'>を返します。変数のリストが表示されますが、質問の答えは間違った型が表示されます。これはあなたの例では明らかではありませんでした。なぜなら、すべての変数がストリングであったからです。しかし、それが返すのは、変数の型ではなく、変数の型の型です。これを修正するにはprint type(name)の代わりにprint eval('type(' + name + ')')を使用します。私は回答セクションにコメントを投稿することをお詫びしますが、私はコメント投稿権がありません。もう1つの質問は閉じます]

    関連する問題