簡體   English   中英

根據全局變量設置選擇不同的功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM