pip install python-varname
在函数内部检索变量名
from varname import varname
def function():
return varname()
func = function()
# func == 'func'
# available calls to retrieve
func = function(
# ...
)
func = \
function()
func = function \
()
# calls lead to failure of retrieving
func = [function()]
def function(*args):
return varname()
func = function(
1, # I
2, # have
3, # a
4, # long
5, # argument
6, # list
)
# func == 'var_0'
def function(*args):
return varname(context = 20)
func = function(
1, # I
2, # have
3, # a
4, # long
5, # argument
6, # list
)
# func == 'func'
varname 来电被深深掩埋
def function():
# I kNow that at which stack this will be called
return varname(caller = 3)
def function1():
return function()
def function2():
return function1()
func = function2()
# func == 'func'
class Klass:
def __init__(self):
self.id = varname()
def copy(self):
return varname()
k = Klass()
# k.id == 'k'
k2 = k.copy()
# k2 == 'k2'
varname调用被深埋在类中
class Klass:
def __init__(self):
self.id = self.some_internal()
def some_internal(self):
return varname(caller = 2)
def copy(self):
return self.copy_id()
def copy_id(self):
return self.copy_id_internal()
def copy_id_internal(self):
return varname(caller = 3)
k = Klass()
# k.id == 'k'
k2 = k.copy()
# k2 == 'k2'
func = [function()]
# func == ['var_0']
func = function \
()
# func == 'var_1'
def function():
return varname()
func = function
x = func() # unable to detect
误报
def func(**kwargs):
return varname()
x = func(
y = func()
)
# x == 'y'
# to avoid this, you have to write the kwargs
# in the same line where the is called
x = func(y=func())
# x == 'x'
Python中唯一具有规范名称的对象是模块,函数和类,并且在定义函数或类或导入模块后,当然不能保证此规范名称在任何命名空间中都具有任何含义。这些名称也可以在创建对象之后进行修改,因此它们可能并不总是特别值得信赖。
如果不递归地遍历命名对象的树,就不可能做到; 名称是对对象的单向引用。一个普通的或多种花园的Python对象不包含对其名称的引用。想象一下,如果要维护一个表示引用它的名称的字符串列表,是否需要每个整数,每个字典,每个列表,每个布尔值!这将是实现的噩梦,对程序员几乎没有好处。