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

Python使用range迭代时,传入函数为何未按指定次数执行?

问题原因分析

核心问题1:函数传递时直接执行,而非传入函数对象

你调用do_n({print_n('hello')}, 5)的时候,print_n('hello')是立即执行的——这行代码会先运行print_n('hello'),所以先打印了一次hello,然后把这个函数的返回值(print_n没有写return,默认返回None)传给了do_n的func参数。这里的大括号完全多余,只是把None包装成了集合,不影响核心问题。

核心问题2:循环内未调用传入的函数

在do_n的循环里,你写的func只是引用了参数值(也就是None),没有加括号()调用它,所以循环过程中根本不会触发打印hello的操作。而print('why?')每次循环都正常执行,所以会打印5次。

修正后的代码示例

可以用lambda包装带参数的函数,转换成无参函数传入:

def do_n(func, n):
    for i in range(n):  # 补上缺失的冒号
        func()  # 调用函数
        print('why?')

def print_n(word):  # 补上缺失的冒号
    print(word)

do_n(lambda: print_n('hello'), 5)

或者把函数和参数分开传递,逻辑更清晰:

def do_n(func, arg, n):
    for i in range(n):
        func(arg)
        print('why?')

def print_n(word):
    print(word)

do_n(print_n, 'hello', 5)

内容的提问来源于stack exchange,提问作者ciska v d merwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:12:09