根据全局变量设置选择不同的函数

2024-06-25 22:45:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想尝试不同的随机数生成器,但不想到处更改代码

所以我定义了一个全局变量rG

rG = None

# and provide an intialisation routine

def initrG(randomGenerator):
    global rG
    if (randomGenerator == "secret"):
        rG = randbelow
    elif (randomGenerator == "mple"):
        rG = random.randint
    elif (randomGenerator == "numpyrandint"):
        rG = numpy.random.randint
    else:
        rG = None

然后在中使用rG-like

randomNumber = rg (10) 

根据initrG例程的初始调用调用不同的生成器

两个问题:

a)不知何故,功能分配似乎不起作用

b)功能具有不同数量的参数。这应该如何处理


Tags: and代码功能nonean定义randomrg
1条回答
网友
1楼 · 发布于 2024-06-25 22:45:42

一般来说,让rG是一个具有确定使用哪种算法的状态的类会更清楚,但您明确要求不必重写代码

这里有一种可能的方法,使用functools.partial创建小包装函数。或者自己创建包装函数,这样会更清楚地看到每个函数都在做什么

from functools import partial
from secrets import randbelow
import numpy as np
import random

rG = None

def initrG(randomGenerator):
    global rG
    if (randomGenerator == "secret"):
        rG = randbelow
    elif (randomGenerator == "mple"):
        rG = partial(random.randint, 0)
    elif (randomGenerator == "numpyrandint"):
        rG = partial(np.random.randint, 0)
    else:
        rG = None

initrG("secret")
print(rG(10), rG.__module__)
initrG("mple")
print(rG(10), rG.func.__module__)
initrG("numpyrandint")
print(rG(10), rG.func)

相关问题 更多 >