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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:06:02