首页 > 解决方案 > 通过 * 或 ** 将参数传递给函数

问题描述

有(比如说)两个函数,norm 和 uniform,它们都接受参数 scale 和 loc。我想要一个名为 pick_a_distribution 的函数,它选择要选择的分布,然后分配适当的参数并做一些其他的事情。但我也希望用户能够为一个参数定义(比如说)一个值并只传递那个值,而不是必须定义整个参数列表。

如果我传递了完整的参数列表,我已经设法编写了一些有效的代码(因此我需要知道默认值是什么,对于那些我真的不想传递的值)。

有没有办法提高效率(在上面的例子中,有没有办法只传递 'loc' 参数)?

下面是一些有效的代码。. .

from scipy.stats import norm, genlogistic, uniform, expon
import math

distribution = {'1': 'normal', '2': 'uniform', '3': 'genlogistic', '4': 'exponential', '5': 'error'}
def mydistr(distr,numofsims, myargument):
    switcher = {
        '1': norm(*myargument),
        '2': uniform(*myargument),
        '3': genlogistic(*myargument),
        '4': expon(*myargument)
    }
    myobs = switcher.get(distr, 'Error in getting distribution')
    return myobs.rvs(numofsims)


print(mydistr( myargument = [2,80], numofsims = 100000, distr = '2' ).mean())

还有一些没有。. . (与以前相同的进口)

    def mydistr(distr,numofsims, myargument):
        switcher = {
            '1': norm(*myargument),
            '2': uniform(**myargument),
            '3': genlogistic(*myargument),
            '4': expon(*myargument)
        }
        myobs = switcher.get(distr, 'Error in getting distribution')
        return myobs.rvs(numofsims)

    print(mydistr( myargument = {loc:80}, numofsims = 100000, distr = '2' ).mean())

我还尝试在最终调用中为 myargument 使用以下内容:= ({loc:80}), = (loc,80) 并尝试了 'loc';

我得到那个名字'loc'没有定义,当我把它放在''我得到一些比较错误。

任何意见非常感谢,提前谢谢你:)

标签: pythonpacking

解决方案


推荐阅读