アプリ版:「スタンプのみでお礼する」機能のリリースについて

Python 2.7.8にて、


def foo(arg):
 print arg

a = 123
print a


を実行すると123が表示されます。
これを、同時に

  "a"

も表示したいです。つまり引数の入っていた変数の名前を得たいです。
出来ればpyファイル名も得たいです。
ネットを参照して、その変数の場所(行位置)は

inspect.stack()[1][2]

で得られることが分かりました。
これを元に検索すると、inspect.stackの説明がありました:


inspect.stack([context])¶(原文)
呼び出し元スタックのフレームレコードのリストを返します。最初の要素は呼び出し元のフレームレコードで、末尾の要素はスタックにある最も外側のフレームのフレームレコードとなります。


この説明の意味が分かりません。

A 回答 (2件)

変数は難しいと思います。


得たファイル名と行番号から、ソースコードを読み出して解析するしかないように思います。

a=1
b=a
func(a)

では、「変数a」を渡すわけではなく、「整数オブジェクト1」が渡されます。
「整数オブジェクト1」は、変数aでもあり、変数bでもあります。
    • good
    • 0
この回答へのお礼

返答ありがとうございます

分かりました

今後もおねがいします

お礼日時:2014/12/24 23:46

[inspect.stack呼び出し元のフレームレコード(現在のフレームレコード),


現在の関数の呼び出し元のフレームレコード,
それの呼び出し元のフレームレコード,
...
一番上の呼び出し元のフレームレコード ]


その関数の説明のちょっと上に

http://docs.python.jp/2/library/inspect.html#ins …
> “フレームレコード”は長さ6のタプルで、以下の値を格納しています:
> フレームオブジェクト、
> ファイル名、
> 実行中の行番号、
> 関数名、
> コンテキストのソース行のリスト、
> ソース行のリストにおける実行中の行のインデックス。

とあります。
ファイル名と行番号は解決でしょう。
    • good
    • 0
この回答へのお礼

返答ありがとうございます

ファイル名を得ることが出来ました。
変数名(質問文中の例では"a")を得る方法はありますか。

お礼日時:2014/12/24 01:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!