2011-12-17 12 views
1

変数の名前にアクセスしようとしています。たとえば、私は(printL) リストを印刷する関数を呼び出して印刷したい場合は私のリストの名前"A_minus_B"変数名にアクセスする

def printL (xlist): 
    print "****************************" 
    print "name of list" 
    print (" entries : "),len(xlist) 
    print xlist 
    print "****************************" 
    return() 

は、どのように私は、"name of list"の代わりに私が使用した名前を"A_minus_B"を印刷する機能を得ることができます関数を呼び出すprintL(A_minus_B)

+1

あなたが使用しているどのような言語を教えている場合には役立ちます。 –

+0

申し訳ありません。これはPython 2.7用です –

+1

複製:http://stackoverflow.com/questions/592746/how-can-you-print-a-variable-name-in-python – heltonbiker

答えて

0

できません。 *詳細な理由はPython language referenceで議論されていますが、基本的にはprintL(A_minus_B)を呼び出すときにPythonが行うのはA_minus_Bとラベル付けされた値をとり、新しいラベルxlistを作成して同じことを言います。その時点から、ラベルxlistは、他のラベルA_minus_Bと実際には、A_minus_Bまたはxlistとラベル付けされた値、またはラベル付けに使用された名前に何も接続していない値とは全く関係ありません。


*さて、あなたは、いくつかの深い「Pythonのブードゥー教」を使用して...あなたは基本的にあなたがprintL(A_minus_B)を呼び出すソースコードの一部を読んで、変数を抽出するためのPythonを伝えなければならないであろうことができますそこから名前。通常、これはあなたがやってはいけないことです(初心者ではなく、通常は間違った方法でプログラムを設計したことを示しているからです)。しかし、デバッグはおそらく適切な場合の1つです。

import inspect, pprint 

def print_values(*names): 
    caller = inspect.stack()[1][0] 
    for name in names: 
     if name in caller.f_locals: 
      value = caller.f_locals[name] 
     elif name in caller.f_globals: 
      value = caller.f_globals[name] 
     else: 
      print 'no such variable: ' + name 
     # do whatever you want with name and value, for example: 
     print "****************************" 
     print name 
     print (" entries : "),len(value) 
     print value 
     print "****************************" 

キャッチは、あなたがこの関数を呼び出すとき、あなたはそれを名前を印刷したい変数ではなく、変数自体のに合格しなければならないということである。ここではそれを行うための一つの方法です。だからprint_values('A_minus_B')で、print_values(A_minus_B)には電話しないでください。たとえば、print_values('A_minus_B', 'C_minus_D', 'foo')のように、複数の名前をすべて印刷して出力することができます。それを行うには

+0

デビッドに感謝します。どのようにこのタイプのものを設計すればよいですか? "関数を呼び出すときに、その関数に渡したパラメータの名前を教えてください"。 listDic = {"listA":list_A、 "listB":list_A}次にprintL(listDic(mylist))を呼び出し、printLの表示mylistを持つことができると思います。この悪いデザインですか? –

+0

それは、なぜ変数の名前が必要かによって異なります。 –

+0

私は自分のリストの値を出力する機能(デバッグ用のsoe)を持っていて、関数に渡したリストの名前を表示したい。辞書的なアプローチがうまくいくようです。私はlistDic = {"list_A":listA、 "list_B":listB} printL( "listX")を呼び出して、 "listX"を印刷し、listXの値をprint listDic [listX]を実行して印刷します。これはサウンドコーディングですか?多くのありがとうThomas –

0

代替方法:

list_dict = {}  #creates empty dictionary 
list_dict['list_a'] = [1,2,3,4,5,6] # here you create the name (key) 
nice_name = 'list_b' 
list_dict[nice_name] = [7,8,9,10,11,12] # here you use already existing string as name (key) 

def list_info(ld): 
    for key in sorted(ld): 
     print "****************************" 
     print key 
     print " entries : " ,len(ld[key]) 
     print ld[key] 
     print "****************************" 

list_info(list_dict) 
関連する問題