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

如何打乱存储函数的列表?自定义打乱函数输出全为None求解决

问题分析与解决方法

核心问题

你之所以得到一堆[None, None, ...],是因为你把函数调用的结果存进了列表,而不是函数本身。

比如你可能写了这种错误代码:

# 错误:存的是函数执行后的返回值
my_list = [cement_mixer(), crane(), ...]

这类打印ASCII图的函数,执行时只会完成打印操作,没有return语句,Python会默认返回None,所以你的列表从一开始就全是None,打乱后自然输出一堆None。

正确步骤

  1. 创建正确的函数列表:把函数名(不带括号)放进列表,这样存的是函数对象,而不是执行结果:

    # 正确:存函数本身,不调用
    func_list = [cement_mixer, crane, ...]  # 44个函数都这么写
    
  2. 打乱列表:你写的scrambled函数是可以正常工作的,或者直接用random.shuffle()(注意这是原地修改列表,不会返回新列表):

    import random
    
    def scrambled(RandomList):
        dest = RandomList[:]  # 复制原列表,避免修改原数据
        random.shuffle(dest)
        return dest
    
    # 打乱后的列表存的还是函数对象
    shuffled_list = scrambled(func_list)
    
  3. 执行打乱后的函数:如果要打印ASCII图,遍历列表调用每个函数即可:

    for func in shuffled_list:
        func()  # 这里才调用函数,输出ASCII图
    

验证示例

拿两个简单的打印函数做演示:

import random

def cement_mixer():
    print("""
    _______
   /       \\
  |  O O  |
   \\_______/
    """)

def truck():
    print("""
   ______
  |      |
  |______|
    O   O
    """)

# 正确创建函数列表
func_list = [cement_mixer, truck]

# 打乱函数列表
shuffled_funcs = scrambled(func_list)

# 执行函数,输出ASCII图
for func in shuffled_funcs:
    func()

# 打印打乱后的列表,会显示函数对象(不是None)
print(shuffled_funcs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:50:27