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

如何用循环在Python中动态定义并调用名称可变的函数?

实现方法

你想要的循环创建不同名称的函数并调用的需求是可以实现的,但你写的func_(i+1)()这种语法不符合Python规范——def关键字后面必须跟合法的标识符,不能直接用表达式作为函数名。下面给你两种可行的实现方案:

方案一:动态创建全局命名空间中的函数

这种方法会把每个函数直接放到全局命名空间里,和你手动定义func_1、func_2的效果一致:

for i in range(1, 401):
    # 用默认参数绑定当前循环的i值,避免闭包陷阱
    def func(num=i):
        a = num
        return a
    # 动态生成函数名并将函数存入全局命名空间
    func_name = f"func_{i}"
    globals()[func_name] = func
    # 调用当前生成的函数
    print(globals()[func_name]())

关键说明:

  • 使用globals()[func_name] = func可以动态给函数命名,func_name是用f-string生成的func_1到func_400字符串。
  • 定义函数时用num=i作为默认参数,是为了避免闭包陷阱:如果直接在函数里用i,所有生成的函数都会引用循环最后一次的i值(也就是400),而不是各自对应的数值。

方案二:用字典存储函数(更推荐)

如果不想污染全局命名空间,用字典来统一管理这些函数会更规范:

func_dict = {}
for i in range(1, 401):
    def func(num=i):
        a = num
        return a
    func_name = f"func_{i}"
    func_dict[func_name] = func
    # 调用当前函数
    print(func_dict[func_name]())

# 后续需要调用某个函数时,直接通过字典获取
# 比如调用func_100:func_dict["func_100"]()

这种方法的优势是所有函数都集中在func_dict里,不会和全局变量冲突,也更便于批量管理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:35:12