如何跳过在Python方法中提供默认参数

Sua*_*guo 7 python

我从Python boto2库中调用此方法:

boto.emr.step.StreamingStep(name, mapper, reducer=None, combiner=None, action_on_failure='TERMINATE_JOB_FLOW', cache_files=None, cache_archives=None, step_args=None, input=None, output=None, jar='/home/hadoop/contrib/streaming/hadoop-streaming.jar')
Run Code Online (Sandbox Code Playgroud)

我知道后面的参数mapper有默认值,所以我不必指定它们的值.但是如果我想在最后只为一个参数传递一个值呢?例如,我要为提供值name,mappercombiner参数,只是使用的默认值reducer.

我应该这样做:

boto.emr.step.StreamingStep('a name', 'mapper name', None, 'combiner name')
Run Code Online (Sandbox Code Playgroud)

或者我应该在它之前明确地传递所有论点?

如果有100个参数,并且我只想为最后一个参数传递一个值,那么我必须向它传递许多默认值.有更简单的方法吗?

mhl*_*ter 10

有两种方法可以做到这一点.第一个,最直接的,是传递一个命名参数:

boto.emr.step.StreamingStep(name='a name', mapper='mapper name', combiner='combiner name')
Run Code Online (Sandbox Code Playgroud)

(注意,因为name并且mapper按顺序,不需要指定参数名称)


此外,您可以传递带** 参数解包的字典:

kwargs = {'name': 'a name', 'mapper': 'mapper name', 'combiner': 'combiner name'}
boto.emr.step.StreamingStep(**kwargs)
Run Code Online (Sandbox Code Playgroud)


Bre*_*arn 5

只需通过关键字传递您想要的参数: boto.emr.step.StreamingStep(name='a name', mapper='a mapper', combiner='a combiner')