You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何对range内元素执行函数?及count()返回函数列表的其他执行方法

问题解答

我来帮你拆解这两个问题哈~

一、如何对range中的每个元素执行函数?

有两种实用的方式,操作起来都很简单:

  • 普通for循环遍历处理:直接遍历range里的每个元素,逐个传入函数执行
    def square(x):
        return x*x
    
    # 遍历range(1,4)的每个元素,逐个调用square函数
    for num in range(1,4):
        print(square(num))  # 会依次输出 1、4、9
    
  • 用map函数批量处理:map能帮你把函数自动应用到range的每个元素上,最后转成列表就能拿到所有结果
    def square(x):
        return x*x
    
    result_list = list(map(square, range(1,4)))
    print(result_list)  # 输出 [1, 4, 9]
    

二、关于count()返回的函数列表的执行问题

先提个小细节:你原代码运行后会发现输出全是9,这是因为闭包的延迟绑定特性——内部的f()函数并没有在循环时就“记住”当时的i值,而是等到你调用f()的时候才去取i的最终值,循环结束后i已经变成3了,所以每个f()返回的都是3*3=9。如果想让每个函数对应循环时的i值,只要给内部函数加个默认参数固化i值就行:

def count(): 
    fs = [] 
    for i in range(1, 4): 
        def f(i=i):  # 把当前循环的i作为默认参数传入,固定住值
            return i*i 
        fs.append(f) 
    return fs 

至于除了你代码里的执行方式,还有这些方法可以运行这些函数:

  • 循环遍历逐个调用:先把函数列表存下来,再循环执行每个函数
    func_list = count()
    for func in func_list:
        print(func())  # 依次输出对应结果
    
  • 列表推导式批量获取结果:一行代码就能拿到所有函数执行后的结果列表
    func_list = count()
    results = [func() for func in func_list]
    print(results)
    
  • 用map函数批量执行:借助lambda表达式来调用每个函数,快速得到结果
    func_list = count()
    results = list(map(lambda f: f(), func_list))
    print(results)
    

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

火山引擎 最新活动