呼んだのは誰?
Posted feedbacks - Python
とりあえず。
1 2 3 4 5 6 7 8 9 | import sys
def bar():
return foo()
def baz():
return foo()
def foo():
return sys._getframe(1).f_code.co_name
|
あまり自信なし。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import inspect
def foo():
print inspect.stack()[1][3]
def bar():
foo()
def baz():
foo()
def main():
bar()
baz()
if __name__ == '__main__':
main()
|
inspectはまだ使いこなせていませんが。
1 2 3 4 5 6 7 8 9 10 11 12 13 | def caller():
import inspect
return inspect.getouterframes(inspect.currentframe())[1][3]
def foo():
print caller()
def bar():
print caller()
foo(), bar()
# foo
# bar
|



にしお
#3384()
Rating1/1=1.00
Ruby で表現すると、 以下のような「fooという関数を呼び出す関数」#bar、#bazがあるとき
このbar, bazの返り値が以下のようになるような関数fooを定義してください。このお題は匿名の「Smalltalk からの挑戦状」を元に作成しました。 確かにこの手のリフレクションの機能が言語によってどう違うのかは興味深いところです。 リフレクションを使う問題をいくつか考えてみたいと思います。 ご投稿ありがとうございました。
[ reply ]