【问题标题】:How to run functions in random order?如何以随机顺序运行函数?
【发布时间】:2017-02-18 13:13:16
【问题描述】:

我想以随机顺序运行函数。它看起来像打乱变量列表的“shuffle”函数。

输入:

def a():
    print('a')

def b():
    print('b')

def c():
    print('c')

shuffle([a,b,c])

这是我想要的输出:

a
b
c

a
c
b

c
b
a

或其他 如何以随机顺序运行函数?

【问题讨论】:

  • from random import shuffle ... 看起来你几乎就在那里。
  • 您是否尝试过编写任何代码?你也应该发布那个。我正在考虑制作一个字典,键是整数,值是函数引用,然后使用随机整数在字典中查找函数。

标签: python function python-3.x random


【解决方案1】:

random.shuffle 是就地操作。所以你需要单独保存列表并随机播放。

import random

functions = [a, b, c]
random.shuffle(functions)

现在,函数被打乱了,你只需要执行它们

for func in functions:
    func()

您可能可以将其存储在一个函数中并像这样进行操作

def run_functions_in_random_order(*funcs):
    functions = list(funcs)
    random.shuffle(functions)
    for func in functions:
        func()

run_functions_in_random_order(a, b, c)

或者你可以简单地使用闭包中的函数,像这样

def run_functions_in_random_order(*funcs):
    def run():
        functions = list(funcs)
        random.shuffle(functions)
        for func in functions:
            func()
    return run

random_exec = run_functions_in_random_order(a, b, c)

random_exec()
random_exec()
random_exec()

【讨论】:

    【解决方案2】:

    我会这样做。基本上是 thefourtheye 所建议的。 Run this Code

    from random import shuffle
    
    def a():
        print('a')
    
    def b():
        print('b')
    
    def c():
        print('c')
    
    def main():
        lis = [a,b,c]
    
        shuffle(lis)
    
        for i in lis:
            i()
    

    【讨论】:

      【解决方案3】:

      或者列个清单,随机抽取:

      import random  
      
      def a():
          print('a')
      
      def b():
          print('b')
      
      def c():
          print('c')  
      
      my_list = [a, b, c] 
      random.choice(my_list)()
      

      【讨论】:

      • 在循环中,这可能(*)多次调用同一个函数。 (*) 每个人连续 3 次只被调用一次的机会实际上太小了(如果我是对的,9 次中有 2 次)称它为“可能”。
      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多