我写了两个共享相同模式的示例代码。
正如您在下面可以看到的,如果参数为None,我使用if语句不将关键字参数传递给子函数。 我想做得更好。
如果您有想法,请分享您的想法。
# 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
答案 0 :(得分:0)
对于第一个示例,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
答案 1 :(得分:0)
函数sorted
的参数<my-component [callback]="showMessage"></my-component>
的默认值为key
。因此,您不需要第一个None
/ if
。简单使用
else
使用alist = sorted(alist, key=key)
的{{1}}的默认值作为函数body
中es.indices.create
的默认值。然后,您也可以在此函数中摆脱mapping
/ create_index
。
编辑: documentation说:
正文–文档
尝试找出这是代表文档的JSON字符串还是Python字典。在JSON字符串的情况下,使用字符串if
作为默认值:
else
编辑2:不能使用空字典(请参见评论中的链接)。因此,在第二种情况下,您将不得不使用"{}"
/ def create_index(index_name, mapping="{}"):
。
答案 2 :(得分:0)
如前所述,对于排序,您基本上只是打包原始功能。对于第二个示例,我认为您不能避免使用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)