Python boto3方法参数的默认值

Python boto3方法参数的默认值,python,amazon-web-services,emr,boto3,Python,Amazon Web Services,Emr,Boto3,我想以编程方式编写一个调用boto3方法并更改方法内默认参数的方法 例如,如果log设置为True,我想使用我的日志存储桶。否则,不要记录它。大概是这样的: def my_run(log=False): log_string = "s3://mylogs" if log else None result = emr.run_job_flow(Name = 'EMRTest1', LogUri = log_strin

我想以编程方式编写一个调用boto3方法并更改方法内默认参数的方法

例如,如果log设置为True,我想使用我的日志存储桶。否则,不要记录它。大概是这样的:

def my_run(log=False):
    log_string = "s3://mylogs" if log else None

    result = emr.run_job_flow(Name   = 'EMRTest1',
                              LogUri = log_string ,
                              ...
                              )
    return result
def my_run(log=False):
    if log:
        result = emr.run_job_flow(Name   = 'EMRTest1',
                                  LogUri = "s3://mylogs" ,
                                  ...
                                  )
    else:
        result = emr.run_job_flow(Name   = 'EMRTest1',
                                  ...
                                  )
    return result
所以,对于默认值,我使用了None。但是,boto3需要一个字符串。我尝试将空字符串作为默认值,但它不是有效值

我知道如果我不指定logURI,它将不会被存储。所以我可以用if语句来实现,比如:

def my_run(log=False):
    log_string = "s3://mylogs" if log else None

    result = emr.run_job_flow(Name   = 'EMRTest1',
                              LogUri = log_string ,
                              ...
                              )
    return result
def my_run(log=False):
    if log:
        result = emr.run_job_flow(Name   = 'EMRTest1',
                                  LogUri = "s3://mylogs" ,
                                  ...
                                  )
    else:
        result = emr.run_job_flow(Name   = 'EMRTest1',
                                  ...
                                  )
    return result
但那是可怕的方式。LogUri只是一个例子。我希望能够更改其他参数。我就是做不出那些嵌套的如果

对于boto3中的字符串等各种类型,是否有我可以使用的默认值

编辑1

从下面的第一条评论中,

有趣的API。虽然没有很好的记录。他们的s3客户端示例运行良好

s3 = boto3.client('s3')

# Access the event system on the S3 client
event_system = s3.meta.events

# Create a function
def add_my_bucket(params, **kwargs):
    print "Hello"
    # Add the name of the bucket you want to default to.
    if 'Bucket' not in params:
        params['Bucket'] = 'mybucket'

# Register the function to an event
event_system.register('provide-client-params.s3.ListObjects', add_my_bucket)

response = s3.list_objects()
然后反应是好的,我也看到你好打印

但现在我尝试为emr的运行作业流做一个示例:

def my_run(name):
    def setName(params, **kwargs):
        print "Hello"
        params['Name'] = name

    current_emr  = boto3.client('emr')
    event_system = current_emr.meta.events

    event_system.register('provide-client-params.emr.RunJobFlow', setName)

    current_emr.run_job_flow(...)
当我运行此程序时,我得到: 输入中缺少必需的参数:Name

我是不是用错了语法? 我确实使用了从当前的\u emr.meta.method\u到\u api\u映射得到的RunJobFlow 也许它没有为emr提供客户端参数


我也没有看到Hello打印

除了服务指定的值之外,没有任何默认值,在这种情况下,我们什么也不发送。如果您想在运行时更改参数,可以挂接到事件系统。你可以读一下。这里的例子与我认为你想要做的非常接近