You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将函数赋值给变量后,如何在函数内部获取该变量的名称字符串?

能否在函数内部获取指向它的变量名?

不能直接通过原生机制获取到my_variable这类指向函数的变量名。

原因很简单:函数是一个独立的对象,变量只是指向这个对象的引用。一个函数可以被多个变量同时引用,甚至可以直接被调用(比如my_function()),函数本身没有内置信息记录自己是被哪个变量名触发调用的。

如果非要实现类似需求,有两种hack性质的方法,但都存在明显局限性:

1. 通过栈帧反向查找命名空间

借助inspect模块获取调用者的局部/全局变量,遍历查找值等于当前函数的变量名:

import inspect

def my_function():
    caller_frame = inspect.currentframe().f_back
    caller_vars = caller_frame.f_locals
    matched_names = [name for name, val in caller_vars.items() if val is my_function]
    print(matched_names)

my_variable = my_function
my_variable()  # 输出 ['my_variable']
my_function()  # 输出 ['my_function']

这种方法的问题:

  • 如果有多个变量指向同一个函数,会返回所有匹配的名字
  • 作用域复杂时(比如嵌套函数、类方法),查找结果可能不准确
  • 依赖inspect模块的内部机制,属于非标准实现,不适合生产环境

2. 调用时显式传递变量名

这是最可靠的方式,让调用方把变量名作为参数传给函数:

def my_function(caller_name=None):
    print(caller_name)

my_variable = my_function
my_variable(caller_name='my_variable')  # 输出 my_variable

这种方法完全可控,没有歧义,但需要调用方主动配合传递参数。


内容的提问来源于stack exchange,提问作者Some Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:01:10