偏函数:如何归一化两个局部的输出类型?

问题描述 投票:0回答:1

我对此感到麻烦...我有一些代码使用functools.partial,因此我可以将无参数函数传递给后续函数。我拥有的所有示例均来自random,并返回整数,例如:

def main():
    random.seed()
    adist = functools.partial(random.uniform, 20, 2000) # no parameter function that returns int
    tdist = functools.partial(random.randrange, 4096) # no parameter function returning int

这些随后将在如下所示的构造函数中使用:

for n in range(4):
    random.seed()
    env = simpy.Environment()  # Create the SimPy environment
    line = runSim(env, adist, sdist, tdist) # dists expected to be ints

并且每次执行runSim时,我们都会根据partial定义中所述的分布获得不同的随机值。我接下来要做的只是定义另一个分布部分函数,​​但是这个函数正在使用random.choices(),它返回list而不是integer -如果我们严格执行此操作,则会使它版本与其余代码不兼容,需要使用数字类型)

sdist = functools.partial(random.choices, population=[64, 536, 1300, 1500], weights=[0.4, 0.02, 0.02, 0.2])

我似乎无法弄清楚如何构建或修改部分函数,​​使其也返回整数。我无法直接对可调用对象进行下标,即使它返回了列表。我认为可能有一些方法可以合并部分(嵌套部分?部分部分?),但我一直无法弄清楚。

python functional-programming partials
1个回答
1
投票

而不是partial,只需编写一个不包含任何参数并以所需形式返回所需值的包装函数:

def sdist():
    return random.choices(population=[64, 536, 1300, 1500], weights=[0.4, 0.02, 0.02, 0.2])[0]

如果要使细线成一行,只需使用lambda关键字:

sdist = lambda: random.choices(population=[64, 536, 1300, 1500], weights=[0.4, 0.02, 0.02, 0.2])[0]
© www.soinside.com 2019 - 2024. All rights reserved.