2

__FUNCTION__Pythonに PHP のマジック定数の類似物はありますか?

def func(x):
    print(__FUNCTION__)  ## <function func at 0x00B02810>
    print(__FUNCTION__.__name__)  ## func

更新:

例を挙げると:

import sys

def func(f = "Foo"):
    b = "Bar"
    print(sys._getframe().f_code) ## <code object func at 0x00B09A20, file "C:\py\func.py", line 5>
    print(func.__code__) ## <code object func at 0x00B09A20, file "C:\py\func.py", line 5>, the same

    print(sys._getframe().f_trace) ## None
    print(sys._getframe().f_locals) ## {'b': 'Bar', 'f': 'Foo'}
    print(sys._getframe().f_lineno) ## 12

if __name__ == "__main__":
    func()
4

3 に答える 3

3

この機能の一部は、inspectモジュールを使用して取得できます。

import inspect

def foo():
    code = inspect.currentframe().f_code
    print code.co_name

上記の関数で作成された変数exec codeであるwhereを使用して、コードオブジェクトからコードを実行することもできます。code

inspect.currentframe()と同じオブジェクトが得られますが、sys._getframe(0)実際にはこのように使用することを目的としていることに注意してください。

于 2013-02-20T18:01:00.680 に答える
2

Pythonにはそのような機能はありません。

ただし、関数を悪用して現在のコードオブジェクトにアクセスすることはできます。sys._getframe()

import sys

def foo():
    print sys._getframe(0).f_code.co_name

ただし、最初に定義された関数の名前のみが出力されます。関数を別の識別子に割り当てるfooと、上記のコードは引き続き出力されますfoo

>>> bar = foo
>>> bar()
'foo'
于 2013-02-20T17:48:50.280 に答える
2

これはあなたが求めているものですか?

In [97]: def a():
    ...:     print sys._getframe().f_code.co_name
    ...:     

In [98]: a()
a

ソース

于 2013-02-20T17:51:09.213 に答える