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

如何用for循环在Python中批量定义add1至add10函数?

如何快速创建add1到add10这10个函数?

这个问题我之前踩过同款坑!你的代码有两个关键问题:

  • 循环里反复定义同一个addi函数,根本没生成add1、add2...这些你需要的函数名;
  • 就算你改了命名方式,直接绑定循环变量还会碰到闭包延迟绑定的坑——循环结束后所有函数都会引用最后一次循环的i值,结果所有add函数返回的都是x+10。

下面给你几种实用的解决方法:

方法1:动态绑定全局变量+默认参数捕获值

直接用globals()把生成的函数绑定到全局命名空间的对应名字上,同时用默认参数把当前循环的i值固定下来:

for i in range(1, 11):
    def add_func(x, num=i):
        return x + num
    # 把函数绑定到add1、add2...add10这些名字
    globals()[f"add{i}"] = add_func

现在调用add2(10)就会返回12,完全符合预期。默认参数num=i会在定义函数时就把当前的i值存下来,避免后续循环改变i值影响函数结果。

方法2:用函数工厂生成(更优雅)

写一个专门的工厂函数来生成加法函数,这样能更清晰地避免闭包问题:

def create_add_func(num):
    # 内部函数会捕获工厂函数的num参数,每个函数的num都是独立的
    def add(x):
        return x + num
    return add

for i in range(1, 11):
    globals()[f"add{i}"] = create_add_func(i)

这种方式把函数创建的逻辑封装起来,可读性更好,也不容易出错。

方法3:把函数存到字典里(避免污染全局命名空间)

如果不需要把这些函数放到全局变量里,存在字典里管理会更整洁:

add_functions = {}
for i in range(1, 11):
    def add_func(x, num=i):
        return x + num
    add_functions[f"add{i}"] = add_func

# 调用方式:add_functions['add2'](10)

再回头说下你原代码的问题:循环结束后,只有一个addi函数存在,而且它引用的i是循环最后一次的值9,所以addi(x)会返回x+10;而你要的add2这个名字从来没被定义过,自然会报NameError啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:15:44