後,我有命名的參數如何獲得命名參數順序調用函數
def sample(a=None, b=None, c=None)
pass
功能如何調用該函數後得到的這些參數的順序?
sample(b=1, a=1, c=1)
out: ['b', 'a', 'c']
sample(c=1, a=1)
out: ['c', 'a']
sample(a=1, b=1)
out: ['a', 'b']
sample(b=1, a=1)
out: ['b', 'a']
sample(a=1, b=1, c=1)
out: ['a', 'b', 'c']
也許這可以使用裝飾或其他方式完成?
更新:
我想爲elasticsearch過濾器像SQLAlchemy的過濾器的方式,而是通過命名參數
class ESQuery(object):
def __init__(self, url, index):
pass
def filter(self, _bool=None, _range=None, _not=None, _and=None, _or=None, _type=None, exists=None, query=None):
return self.query_body
包裝調用該函數後,我需要查詢的正確順序,像這樣http://www.elastic.co/guide/en/elasticsearch/reference/1.5/query-dsl-and-filter.html
我只是不能建立查詢,以便保持嚴格的順序
es = Someclass(url, index)
es.filter()
我想用命名的參數,人們覺得方便的工具提示使用做
更新2:
我想另謀出路,一條線是不夠的,因爲不可能是長時間的電話
from api.search_api import ESQuery
es = ESQuery(index='lot', place='etsy_spider', match_all=True)
print es.\
filter(query='{ "tweet": "full text search" }').\
filter(_range='{ "created": { "gte": "now - 1d/d" }}').\
filter(should='{ "term": { "featured": true }},')
也許有關於如何簡化elasticsearch中長查詢的一些想法?
您可以舉個例子說明這些信息會有用嗎? – Kevin 2015-04-03 19:50:10
據我所知這是不可能的,因爲命名參數在內部作爲字典處理,沒有命令 – Finwood 2015-04-03 19:53:03
對於簡單的情況,一種方法是從調用幀讀取函數調用行並解析它使用正則表達式或其他東西,但如果函數調用跨越多行,這將無法正常工作。 – 2015-04-03 19:58:15