0

次のように、変数/オブジェクト名を str として返すことができる関数が必要です。

def get_variable_name (input_variable):
    ## some codes

>>get_variable_name(a)
'a'

>>get_variable_name(mylist)
'mylist'

ばかげているように見えますが、後で「exec()」で変数に関する式を作成する関数が必要です。「get_variable_name」の書き方について誰か助けてもらえますか?

4

7 に答える 7

7

私は、この種の質問のいくつかの変種を SO で数回見てきました。答えはありません名前とオブジェクトの関連付けが必要なときにいつでもを使用する方法を学びます。dict 後でこれに感謝します。

「私のコードでオブジェクトの名前を検出するにはどうすればよいですか?」という質問への回答として、(comp.lang.python で) Fredrik Lundh からの引用を次に示します。

玄関先で見つけた猫の名前を知るのと同じ方法です。猫 (オブジェクト) 自体はその名前を伝えることができず、特に気にもしていません。そのため、その名前を知る唯一の方法は、猫 (オブジェクト) の場合、すべての隣人 (名前空間) …</p>

….そして、多くの名前で知られていたり、名前がまったくないことに気付いても驚かないでください!


注:少なくとも CPython 実装では、オブジェクトにバインドされている名前のリストを取得することは技術的に可能です。それが実証されたことに興味がある場合は、inspectここで私の回答に示されているモジュール の使用法を参照してください。

オブジェクトは、割り当てられている変数の名前を調べることができますか?

この手法は、クレイジーなデバッグ セッションでのみ使用する必要があります。設計でこのようなものを使用しないでください。

于 2012-08-30T02:35:20.173 に答える
5

一般的には不可能です。関数に何かを渡すときは、名前ではなくオブジェクトを渡します。同じオブジェクトに多くの名前を付けることも、名前を付けないこともできます。を呼び出した場合、関数は何をするはずget_variable_name(37)ですか? なぜこれをやりたいのかを考え、実際のタスクを達成するための別の方法を見つけようとする必要があります。

get_variable_name(37)編集: 37 を返したい場合は、実行してから実行するa=37と、それget_variable_name(a)も 37 が返されます。関数内に入ると、オブジェクトの「名前」が外部にあったことを知る方法がありません。

于 2012-08-30T02:17:36.963 に答える
0
def getvariablename(vara):
    for k in globals():
        if globals()[k] == vara:
                  return k
     return str(vara)

場合によっては機能する可能性があります...しかし、破損する可能性が非常に高くなります...そして、私は基本的に、いかなる種類の本番コードでも使用しません...

基本的に、これを行う正当な理由は思いつきません...そして約100万人がそうしません

于 2012-08-30T02:26:16.097 に答える
-1

ユーザー入力に基づいて選択された変数の名前を返したいだけの場合...入力を追跡できるように、選択から生成された値に加えて、選択を行うときに変数名をコードに追加します。例えば:

temp = raw_input('Do you want a hot drink?  Type yes or no. ')
size = raw_input('Do you want a large drink? Type yes or no. ')
if temp and size == 'yes':
    drink = HL
    name = 'Large cafe au lait'
if temp and size != 'yes':
    drink = CS
    name = 'Small ice coffee'
print 'You ordered a ', name, '.'

MJ

于 2013-02-03T19:07:36.697 に答える
-2

おそらく、traceback.extract_stack() を使用してコール スタックを取得し、エントリから変数名を抽出できますか?

def getVarName(a):
    stack = extract_stack()
    print(stack.pop(-2)[3])

bob = 5
getVarName(bob);

出力:

getVarName(bob)
于 2012-08-30T02:46:45.160 に答える