如何打乱存储函数的列表?自定义打乱函数输出全为None求解决
问题分析与解决方法
核心问题
你之所以得到一堆[None, None, ...],是因为你把函数调用的结果存进了列表,而不是函数本身。
比如你可能写了这种错误代码:
# 错误:存的是函数执行后的返回值 my_list = [cement_mixer(), crane(), ...]
这类打印ASCII图的函数,执行时只会完成打印操作,没有return语句,Python会默认返回None,所以你的列表从一开始就全是None,打乱后自然输出一堆None。
正确步骤
创建正确的函数列表:把函数名(不带括号)放进列表,这样存的是函数对象,而不是执行结果:
# 正确:存函数本身,不调用 func_list = [cement_mixer, crane, ...] # 44个函数都这么写打乱列表:你写的
scrambled函数是可以正常工作的,或者直接用random.shuffle()(注意这是原地修改列表,不会返回新列表):import random def scrambled(RandomList): dest = RandomList[:] # 复制原列表,避免修改原数据 random.shuffle(dest) return dest # 打乱后的列表存的还是函数对象 shuffled_list = scrambled(func_list)执行打乱后的函数:如果要打印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
相关产品推荐
相关产品推荐

