[英]Selecting different functions based on global variable setting
我想嘗試不同的隨機數生成器,但不要到處更改我的代碼。
所以我定義了一個全局變量 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 就像在
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.