【问题标题】:Python: Randomly execute python functions with not random inner parametersPython:随机执行没有随机内部参数的python函数
【发布时间】:2021-01-07 12:44:02
【问题描述】:

我正在创建一个在循环中随机执行其他函数的函数,但我在 Stack Overflow 中看到的所有其他示例之间的区别在于,在这种情况下,参数必须针对每个函数。

例如:func_a()只能用参数a执行

import random    

def account(self, first_name, last_name, ID):
    random.choice([
                self.function_first_name(first_name),
                self.function_last_name(last_name),
                self.function_user_name(user_name)
            ])

在这种情况下,我一直以相同的顺序执行,它的行为就像一个循环,这没问题,但不是随机的。

我怎样才能保持简单并以随机顺序执行所有功能一次

【问题讨论】:

  • 先生成一个从0到函数个数的数字怎么样。然后使用 switch 语句来执行函数。

标签: python python-3.x random


【解决方案1】:

问题在于,当您创建列表时,您实际上每次都在调用和评估所有三个函数。相反,您可以将函数压缩到它们对应的参数,然后随机选择一个函数和参数对,然后只调用那个。

def account(self, first_name, last_name, ID):
    funcs = [self.function_first_name,
             self.function_last_name,
             self.function_user_name]
    args = [first_name, last_name, ID]
    fun, arg = random.choice(list(zip(funcs, args)))
    fun(arg)

一些例子

>>> p.account('bob', 'smith', 12345)
smith
>>> p.account('bob', 'smith', 12345)
bob
>>> p.account('bob', 'smith', 12345)
12345
>>> p.account('bob', 'smith', 12345)
smith
>>> p.account('bob', 'smith', 12345)
12345

如果你想调用所有函数,但以随机顺序你可以这样做

def account(self, first_name, last_name, ID):
    funcs = [self.function_first_name,
             self.function_last_name,
             self.function_user_name]
    args = [first_name, last_name, ID]
    pairs = list(zip(funcs, args))
    random.shuffle(pairs)
    for fun, arg in pairs:
        fun(arg)

【讨论】:

  • 这个不错!如何在循环中执行它?为了好玩,arg in list(zip(funcs, args))??
  • 你到底想循环什么?你想对random.choice 执行一定的N 次数吗?
  • 如果有 3 个函数,则以随机顺序执行所有函数,但每个函数只执行一次
  • 在这种情况下,您可以使用random.shuffle 随机化您的函数/参数对列表,然后只需调用随机列表中的每个项目。
猜你喜欢
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2010-12-17
相关资源
最近更新 更多