Python:获取分配给方法的变量名
我正在尝试找出如何获得分配给方法的变量名,例如:Python:获取分配给方法的变量名,python,Python,我正在尝试找出如何获得分配给方法的变量名,例如: import inspect def a(): print inspect.stack()[0][3] b = a b() 这将返回a而不是b,如果我使用[1][3]作为索引,它将给我。我希望得到b。有没有简单的pythonic解决方案?我是否只需要创建装饰器和包装器就可以做到这一点?没有(简单的)方法可以做到这一点 放入堆栈框架的不是调用函数的名称,而是写入函数a.func\u code.co\u name的code对象中的名称
import inspect
def a():
print inspect.stack()[0][3]
b = a
b()
这将返回a
而不是b
,如果我使用[1][3]
作为索引,它将给我
。我希望得到b
。有没有简单的pythonic解决方案?我是否只需要创建装饰器和包装器就可以做到这一点?没有(简单的)方法可以做到这一点
放入堆栈框架的不是调用函数的名称,而是写入函数a.func\u code.co\u name
的code对象中的名称
无法检测函数是如何调用的。您可以尝试检查上面一级的代码:
功能更改为
def a():
return inspect.stack()
我们可以看到
>>> import dis
>>> f=a()[1][0]
>>> dis.dis(f.f_code)
1 0 LOAD_NAME 0 (a)
3 CALL_FUNCTION 0
6 LOAD_CONST 0 (1)
9 BINARY_SUBSCR
10 LOAD_CONST 1 (0)
13 BINARY_SUBSCR
14 STORE_NAME 1 (f)
17 LOAD_CONST 2 (None)
20 RETURN_VALUE
>>> b=a
>>> f=b()[1][0]
>>> dis.dis(f.f_code)
1 0 LOAD_NAME 0 (b)
3 CALL_FUNCTION 0
6 LOAD_CONST 0 (1)
9 BINARY_SUBSCR
10 LOAD_CONST 1 (0)
13 BINARY_SUBSCR
14 STORE_NAME 1 (f)
17 LOAD_CONST 2 (None)
20 RETURN_VALUE
>>> f=[b][0]()[1][0]
>>> dis.dis(f.f_code)
1 0 LOAD_NAME 0 (b)
3 BUILD_LIST 1
6 LOAD_CONST 0 (0)
9 BINARY_SUBSCR
10 CALL_FUNCTION 0
13 LOAD_CONST 1 (1)
16 BINARY_SUBSCR
17 LOAD_CONST 0 (0)
20 BINARY_SUBSCR
21 STORE_NAME 1 (f)
24 LOAD_CONST 2 (None)
27 RETURN_VALUE
很难对其进行可靠的分析。为什么您认为需要知道函数分配给的名称(其中一个)?如果功能仅在列表中分配,该怎么办?你想达到什么目标?