在Python中实现JavaScript风格的可选参数

2024-10-02 10:31:45 发布

您现在位置:Python中文网/ 问答频道 /正文

JavaScript样式

假设我有一个函数以两个对象作为可选参数输入,对象中的一些参数有默认值,在JavaScript中,我可以这样实现:

function func(setting1, setting2){
    arga = setting1.a || 1;
    argb = setting2.b || 2;
    argc = setting2.c;
    ...
}

Python实现

我想到了一些想法,但我认为没有一个是“好的”


第一个是:

params = {"arga":2, "argb":3}
def func(argc, arga=1, argb=2):
    ...
func(**params)

问题是,这种类型的实现不能支持我想要的语义,即setting1和setting2需要分开,因为它们服务于不同的子过程。此外,它还需要手动仔细选择默认参数的位置


这是第二个:

def func(setting1, setting2):
    try:
        arga = setting1.a
    except KeyError:
        arga = 1
    ...

我觉得很难看


也许这是最好的:

def func(setting1, setting2):
    arga = setting1.get("a") or 1
    argb = setting1.get("b") or 2
    ...

有什么好方法可以用python实现吗


Tags: or对象函数参数getdef样式params
2条回答

我不知道你说的丑陋是什么意思,但这最接近你想要的我认为:

def func(setting1 = None, setting2 = None):
    setting1 = "a" if setting1 is None else setting1 
    setting2 = "b" if setting2 is None else setting2

注意,在Python中这一点并没有真正意义,因为它支持默认参数和键控调用,所以

def func(setting1 = "A", setting2 = "B"):

打电话给

func(setting2="C")

只设置第二个设置,第一个设置使用默认值。当然,如果默认值涉及函数调用,那么您必须使用您的解决方案

如果settingNdict,则可以执行以下操作:

argZ = settingN.get('z', default_value)

因此,如果settingN没有键'z',则default_value将被返回

相关问题 更多 >

    热门问题