我从Python boto2 library调用此方法:
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')
我知道mapper
之后的参数有默认值,所以我不必指定它们的值。但是如果我想在最后传递一个参数的值呢?例如,我想为name
,mapper
和combiner
参数提供值,并使用reducer
的默认值。
我应该这样做:
boto.emr.step.StreamingStep('a name', 'mapper name', None, 'combiner name')
或者我应该在它之前明确地传递所有论据吗?
如果有100个参数,并且我只想为最后一个参数传递一个值,那么我必须向它传递许多默认值。有更简单的方法吗?
答案 0 :(得分:7)
有两种方法可以做到这一点。第一个,最直接的,是传递一个命名参数:
boto.emr.step.StreamingStep(name='a name', mapper='mapper name', combiner='combiner name')
(注意,因为name
和mapper
是有序的,所以不需要指定参数名称。
此外,您可以使用**
argument unpacking
kwargs = {'name': 'a name', 'mapper': 'mapper name', 'combiner': 'combiner name'}
boto.emr.step.StreamingStep(**kwargs)
答案 1 :(得分:2)
只需按关键字传递您想要的参数:boto.emr.step.StreamingStep(name='a name', mapper='a mapper', combiner='a combiner')
答案 2 :(得分:0)
不要使用位置参数,而是使用关键字参数。
如果必须使用位置参数,请使用* args list,使用循环或其他东西用默认值填充它,然后设置最后一个参数,然后将其传递给方法。
答案 3 :(得分:-1)
不,有一种(可能)更好的方法来做到这一点
当有默认值时,您可以指定要声明的参数,您只需像多个定义一样编写它。例如,假设您正在调用一个定义如下的函数:
def Method(param1=0, param2=0, param3=0, param4=0, param5=0):
print(str(param1 + param2 + param3 + param4 + param5))
您希望参数 param1
为默认值 (0)。你可以像这样执行函数:
Method(param1= 5, param2= 4, param3= 3, param5= 8)