安装
pip install python-varname
用法
from varname import varnamedef function(): return varname()func = function()# func == 'func'# available calls to retrievefunc = function( # ...)func = function()func = function ()# calls lead to failure of retrievingfunc = [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'
如果无法检索名称
varname静态索引的起始位置是0将变量名称标记为失败。
func = [function()]# func == ['var_0']func = function ()# func == 'var_1'
局限性
- 通话必须以所需格式书写
- 必须事先估计上下文,尤其是对于带有长参数列表的函数
- 你必须知道函数/类将在哪个堆栈中调用
- 为了提高性能,因为涉及检查,所以更好地缓存名称
- 不支持别名
def function(): return varname()func = functionx = 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 calledx = func(y=func())# x == 'x'
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)