簡體   English   中英

將參數傳遞給函數,該參數必須作為參數傳遞給python中的另一個函數

[英]Passing an argument to the function , which has to be passed as an argument to another function in python

我不確定這是否是一個難題。 我有一個功能,可以說

def load(es , fn_set_your_data ,  input_file, **kwargs):
    success, some_ = bulk(es, fn_set_your_data(input_file, **kwargs))


def fn_index_data( index_name , doc_type , input_file , fn_set_your_data , mapping = False , force = False):

    es = Elasticsearch()
    if es.indices.exists(index= index_name):

        return "Index Already exists"

    else:

        if mapping:
            es.indices.create(index=index_name, body=mapping, ignore=400)

            print "Mapping is done"

            load(es  , fn_set_your_data , input_file , index_name = index_name , doc_type_name = doc_type)

現在有另一個函數接受該函數作為參數,比如global_fn。 我需要將local_fn作為參數傳遞給global_fn,參數split_value每次在循環中都會更改。 例如:

def set_your_data(input_file, index_name , doc_type_name , split_value = 1):

    global global_count
    for skill_ , items_ in input_file.iteritems():

        main_item = items_['main_item'].strip()
        main_item_split = main_item.split() 
        if len(main_item_split) == split_value :

            query = {'item' : main_item}

            yield {
                "_index": index_name,
                "_type": doc_type_name,
                "_id": global_count,
                "_source": query
            }
        else:
            continue


if __name__ == "__main__":

    index_name_list = ['percolate_bigram' , 'percolate_ngram' , 'percolate_bigram']
    doc_type   = 'alert'


    for idx, index_name in enumerate(index_name_list):
        split_value = idx
        fn_index_data(index_name  = index_name , doc_type = doc_type , input_file = input_data , fn_set_your_data = set_your_data , mapping = mapping)

#####我如何將split_value傳遞給set_your_data(local_fn),然后將其傳遞給fn_index_data(global_fn)。 希望這段代碼能提供一個良好而合理的環境。

**kwargs東西可行嗎? 任何評論都會有用。

def set_your_data(split_value=1):
    def set_your_data_inner(input_file, index_name , doc_type_name):
        global global_count
        for skill_ , items_ in input_file.iteritems():

            main_item = items_['main_item'].strip()
            main_item_split = main_item.split() 
            if len(main_item_split) == split_value :

                query = {'item' : main_item}

                yield {
                    "_index": index_name,
                    "_type": doc_type_name,
                    "_id": global_count,
                    "_source": query
                }
            else:
                continue
    return set_your_data_inner

if __name__ == "__main__":

    index_name_list = ['percolate_bigram' , 'percolate_ngram' , 'percolate_bigram']
    doc_type   = 'alert'


    for idx, index_name in enumerate(index_name_list):
        fn_index_data(index_name  = index_name , doc_type = doc_type , input_file = input_data , fn_set_your_data = set_your_data(idx) , mapping = mapping)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM