Python类中随机调用函数时如何跳过已调用函数避免重复执行
实现方案
要实现随机调用不重复的函数,核心思路是每次执行callF时先对可选函数列表做随机打乱,再按需要调用的次数取前N个执行即可,完整修改后的代码如下:
import random class Funcskip: def __init__(self, min_ops=2, max_ops=4): self.min_ops = min_ops self.max_ops = max_ops self.ops = [self.__add, self.__sub, self.__mult, self.__div] # 新增参数校验,避免max_ops超过可选函数总数 if self.max_ops > len(self.ops): raise ValueError(f"max_ops最大可设值为{len(self.ops)},不可超过可选函数总数") def __initParams(self): self.num_ops = random.randint(self.min_ops,self.max_ops) def __add(self, a, b): print("1. add") return a+b def __sub(self, a,b): print("2. sub") return a-b def __mult(self, a, b): print("3. mult") return a*b def __div(self, a,b): print("4. div") return a//b def callF(self,a,b): self.__initParams() print(f"本次调用函数数量:{self.num_ops}") total = 0 # 复制全量函数列表,避免修改实例原始的ops属性 available_ops = self.ops.copy() # 随机打乱函数顺序 random.shuffle(available_ops) # 取前num_ops个函数执行,天然无重复 for op in available_ops[:self.num_ops]: total += op(a,b) return total obj = Funcskip() a = 10 b = 5 _total = obj.callF(a,b) print(f"运算结果总和:{_total}")
逻辑说明
- 原有逻辑中每次循环调用
random.choice会从全量列表随机选取,无法避免重复,改为先打乱列表再按次选取的方式,简单高效实现了单次callF调用内的函数去重 - 新增参数校验避免用户设置的
max_ops超过可选函数总数,当前共4个运算函数,最多可设置max_ops=4 - 如果需要跨多次
callF调用也禁止重复调用同一函数,只需在__init__中新增self.used_ops = set()属性,每次选函数前过滤掉已记录的函数,执行后将当前函数加入该集合即可
内容的提问来源于stack exchange,提问作者Md. Rezwanul Haque
相关产品推荐
相关产品推荐

