Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现JavaScript';Python中可选参数的s样式 JavaScript风格_Python - Fatal编程技术网

实现JavaScript';Python中可选参数的s样式 JavaScript风格

实现JavaScript';Python中可选参数的s样式 JavaScript风格,python,Python,假设我有一个函数将两个对象作为可选参数输入,并且对象中的一些参数具有默认值,在JavaScript中,我可以这样实现它: function func(setting1, setting2){ arga = setting1.a || 1; argb = setting2.b || 2; argc = setting2.c; ... } Python实现 我想到了一些想法,但我认为没有一个是“好的” 这是第一个: params = {"arga":2, "arg

假设我有一个函数将两个对象作为可选参数输入,并且对象中的一些参数具有默认值,在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)
问题是,这种类型的实现不能支持我想要的语义,也就是说,设置1和设置2需要分开,因为它们用于不同的子过程。此外,还需要手动仔细选择默认参数的位置


这是第二个:

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中实现这一点吗?

不确定您所说的丑陋是什么意思,但我认为这与您想要的最接近:

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

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

不确定“丑陋”是什么意思,但我认为这与您想要的最接近:

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

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

如果
settingN
是一个
dict
,您可以执行以下操作:

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

因此,如果
settingN
没有键
'z'
,将返回
默认值。

如果
settingN
dict
,您可以执行以下操作:

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

因此,如果
settingN
没有键
'z'
,将返回
默认值

,因为参数可能是long@user8510613我不理解这个评论。在任何情况下,第一个解决方案都是我所知道的最类似JS的解决方案,不需要对调用方进行任何更改(如需要字典)。没错,我想我可以使用**操作符将两个参数dict解包到不同的子过程中。因为参数可能是long@user8510613我不理解这个评论。在任何情况下,第一个解决方案都是我所知道的最类似JS的解决方案,不需要对调用方进行任何更改(如需要字典)。没错,我想我可以使用**操作符将两个参数的dict解包到不同的子过程。