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

Python如何通过函数名字符串在运行时修改对应函数定义

错误原因

你之前的写法不生效是因为:eval_fist = eval(func_to_change) 只是把first函数的引用赋值给了新变量eval_fist,后续修改eval_fist的指向只是改变了这个临时变量的值,完全不会影响原来的first变量本身。

正确实现方案

方案1:使用全局变量字典(推荐,安全性更高)

Python中全局作用域的变量、函数都存储在globals()返回的字典里,键就是变量/函数的名字符串,直接修改这个字典的对应值即可实现目标:

def first():
    print("first")
    
def second():
    print("second")
    
func_to_change = "first"
# 直接修改全局作用域中对应函数名的绑定
globals()[func_to_change] = second

print(first)
print(second)

运行后两个输出的函数地址完全一致,和直接写first = second的效果完全相同。

方案2:使用exec直接修改原变量(不推荐,存在代码注入风险)

如果一定要用exec实现,需要直接对目标函数名对应的变量赋值,而不是修改临时变量:

def first():
    print("first")
    
def second():
    print("second")
    
func_to_change = "first"
# 直接构造赋值给目标函数名的执行语句
exec(f"{func_to_change} = second")

print(first)
print(second)

如果需要修改的是类的成员函数,不需要操作全局字典,直接用setattr(类实例/类对象, 函数名字符串, 新函数)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:39:01