在功能列表中选择和执行功能

时间:2020-02-13 22:12:31

标签: python

我正在尝试编写一个可以随机移动的程序,它具有许多功能,该程序像使用关键字一样选择使用该功能,但是我的代码对于一些简单的事情变得很大,有一种更简单的方法写这段代码?

list_mov = ["R", "RI", "L", "LI", "U", "UI", "D", "DI", "F", "FI", "B", "BI"]

mov = random.choice(list_mov)

# Here i need to make a list of selected functions
resolution.append(mov)

if mov == "R":
    mov_r()
if mov == "RI":
    mov_ri()
if mov == "L":
    mov_l()
if mov == "LI":
    mov_li()
if mov == "U":
    mov_u()
if mov == "UI":
    mov_ui()
if mov == "D":
    mov_d()
if mov == "DI":
    mov_di()
if mov == "F":
    mov_f()
if mov == "FI":
    mov_fi()
if mov == "B":
    mov_b()
if mov == "BI":
    mov_bi()

4 个答案:

答案 0 :(得分:2)

一切都是python中的对象。包含的功能。所以我可以这样写:

list_mov = {
  "R": mov_r,
  "RI": mov_ri,
  "L": mov_i,
  ...  # fill in more here
}

mov = random.choice(list(list_mov.keys()))

# Here i need to make a list of selected functions
resolution.append(mov)
# get function, then execute it
func = list_mov[mov]
func()

答案 1 :(得分:0)

您可以只创建一个函数列表,然后从它们中选择一个变量(就像对字符串一样)。它们都有相同的参数,因此应该很容易:

list_mov = [mov_r, mov_ri, ...]
mov = random.choice(list_mov)
resolution.append(mov)
# And finally
mov()

答案 2 :(得分:0)

在python中,一切都是对象。您可以简单地执行以下操作:list_mov = [mov_r, mov_l, ...] 因此,您可以使用:

mov = random.choice(list_mov)
mov()

答案 3 :(得分:0)

您实际上可以从函数实例列表中进行选择,然后调用您随机选择的函数实例,例如:

import numpy as np

def x():
    print("function x!")

def y():
    print("y here.")

def z():
    print("zzz")

av_functions=[x,y,z]
mv=np.random.choice(av_functions)

mv()