Python,当参数为None时,如何不将关键字参数传递给方法?

2024-04-24 01:26:55 发布

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

我编写了两个共享相同模式的示例代码。你知道吗

正如您在下面看到的,我使用if语句在参数为None时不将关键字参数向下传递给子函数。 我想用更好的方式来做。你知道吗

如果你有想法,请分享你的想法。你知道吗

# example_1
def mysort(alist, key=None):
    if key is None:
        alist = sorted(alist)
    else:
        alist = sorted(alist, key=key)

    return alist

# example_2
def create_index(index_name, mapping=None):
    es = Elasticsearch()
    if mapping in None:
        response = es.indices.create(index=index_name)
    else:
        response = es.indices.create(index=index_name, body=mapping)
    return respone

Tags: keynamenone参数indexreturnifes
3条回答

函数^{}的参数key的默认值是None。因此,您的第一个if/else是不必要的。简单使用

alist = sorted(alist, key=key)

使用es.indices.createbody的默认值作为函数create_indexmapping的默认值。然后您也可以去掉这个函数中的if/else。你知道吗

编辑:documentation表示:

body – The document

尝试找出这是一个JSON字符串还是一个表示文档的Python字典。在JSON字符串的情况下,使用字符串"{}"作为默认值:

def create_index(index_name, mapping="{}"):

编辑2:使用空的dict将不起作用(请参见注释中的链接)。所以在第二种情况下,您必须使用if/else。你知道吗

对于第一个示例,key的默认值是None,因此您可以直接传递它:

# example_1
def mysort(alist, key=None):
    alist = sorted(alist, key=key)
    return alist

也可以设置不同的默认值。例如,123的新默认值将传递给sorted。你知道吗

# example_1
def mysort(alist, key=some_key):
    alist = sorted(alist, key=key)
    return alist

如前所述,对于sorted,您基本上只是打包原始函数。对于第二个例子,我不认为可以避免使用if,但是可以稍微缩短一下。你知道吗

def create_index(index_name, mapping=None):
    kwargs = {'index': index_name}
    if mapping is not None:
        kwargs['body'] = mapping
    return Elasticsearch().indices.create(**kwargs)

相关问题 更多 >