根据全局变量设置选择不同的功能



我想尝试不同的随机数生成器,但不要在任何地方更改我的代码。

所以我定义了一个全局变量 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

然后像在

randomNumber = rg (10) 

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

两个问题:

a( 不知何故,功能的分配似乎不起作用。

b( 函数具有不同数量的参数。应该如何处理。

通常,让 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)

最新更新