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

很难对其进行可靠的分析。

为什么您认为需要知道函数分配给的名称(其中一个)?如果功能仅在列表中分配,该怎么办?你想达到什么目标?