如何获取Python中已导入方法的别名字符串?
获取Python函数别名的字符串形式
首先要明确:函数对象本身不会存储它被赋予的别名信息——因为一个函数可以被多个变量同时引用(比如a = myfunc; b = myfunc),所以不存在专门记录单一"别名"的属性。
如果一定要在当前作用域中找到指向该函数的变量名,可以通过遍历当前作用域的符号表实现,示例代码如下:
from foo import foo_func as myfunc def get_alias(target_obj): # 遍历当前局部作用域的变量 for var_name, obj in locals().items(): # 用is判断对象身份,避免值相等但对象不同的情况 if obj is target_obj: return var_name # 局部作用域找不到就去全局作用域找 for var_name, obj in globals().items(): if obj is target_obj: return var_name return None print(get_alias(myfunc)) # 输出 'myfunc'
需要注意几个局限性:
- 如果同一个函数被多个变量引用,只会返回遍历过程中第一个匹配的变量名
- 该方法仅能在变量所在的作用域中生效,跨作用域无法直接获取
- 若函数未被任何变量直接引用(比如匿名传递),则无法找到对应的名称
另外补充:__name__属性存储的是函数定义时的原始名称,和变量别名没有关联,所以确实无法通过它获取别名。
内容的提问来源于stack exchange,提问作者Mad Max
相关产品推荐
相关产品推荐

