передача аргументов функции через * или ** - PullRequest
0 голосов
/ 03 марта 2020

есть (скажем) две функции, норма и равномерная, обе из которых принимают аргументы scale и lo c. Я хотел бы иметь функцию pick_a_distribution, которая выбирает, какой дистрибутив выбрать, а затем назначает соответствующие аргументы и выполняет другие действия. Но я также хочу, чтобы пользователь мог определить (скажем) значение для одного аргумента и передать только это, а не определять весь список аргументов.

Мне удалось написать некоторый код, который работает, если я передаю полный список аргументов (и поэтому мне нужно знать, каковы значения по умолчанию, для тех, которые я на самом деле не хочу передавать).

Есть ли способ повысить эффективность (в вышеприведенном примере будет ли способ передать только аргумент 'lo c')?

ниже приведен код, который работает , , ,

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())

Я также пытался получить следующее для моего аргумента в последнем вызове: = ({lo c: 80}), = (lo c, 80) и тоже попробовал 'lo c';

Я понимаю, что имя 'lo c' не определено, и когда я помещаю его в '', я получаю некоторые ошибки сравнения.

Любые комментарии высоко ценится, заранее спасибо :)

...