好的,导致streaming_bulk(...)。.为循环结构解释python

问题描述 投票:-1回答:1

任何人请解释代码行

    es_question = (q.as_elasticsearch_dict() for q in questions)
    for ok, result in streaming_bulk(
        get_client(),
        es_question,
        index = settings.ES_INDEX,
        raise_on_error = False
    ):
        if not ok:
            all_ok = False
            action, result = result.popitem()
            logger.error(FAILED_TO_LOAD_ERROR.format(result['_id'], result))

我想知道es_questions上的for循环以及es_question下面的代码行的解释

python django for-loop elasticsearch
1个回答
0
投票
这些资源可在List comprehensiongenerator expression中找到。

第二部分-循环
您的问题在以下代码行上:

for ok, result in streaming_bulk( get_client(), es_question, index = settings.ES_INDEX, raise_on_error = False ):

首先让我们看一个简单的例子:

my_list=["a","b","c","d"] for x in my_list: print(x)

这将循环遍历my_list中的值,将这些值分配给变量x。现在让我们来看一个稍微复杂的示例。

my_list=[("a",1),("b",2),("c",3),("d",4)]
for x,y in my_list:
    print(x)
    print(y)

在这种情况下,for循环仍在my_list中的4个项中的每个循环,但它也在执行tuple unpacking,因此变量x获取元组中第一个项的值(字母),变量y获取元组中第二项的值(数字)。

最后,还有另一件事要看:

streaming_bulk( get_client(), es_question, index = settings.ES_INDEX, raise_on_error = False)

这只是一个函数调用(分布在多行中)。该函数或者返回清单/元组的清单/元组(每个都有两个值),类似于我的上一个示例,或者此函数是一个生成器函数,每次通过循环都会产生两个值。
© www.soinside.com 2019 - 2024. All rights reserved.