【问题标题】:for x,y in function(): - Explain the python for loop structurefor x,y in function(): - 解释 python for 循环结构
【发布时间】:2019-11-30 15:39:44
【问题描述】:

谁能解释一下代码行

    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))

我想知道for循环对es_questions做了什么,以及es_question下面那行代码的解释

【问题讨论】:

    标签: python for-loop generator


    【解决方案1】:

    第 1 部分 - 生成器表达式

    es_question = (q.as_elasticsearch_dict() for q in questions)
    

    不是真正的 for 循环,而是所谓的列表推导。在这种情况下,因为它在括号中而不是在括号中,所以它实际上是一个生成器表达式。

    可以在以下位置找到这些资源:List comprehensiongenerator expression

    第 2 部分 - For 循环

    您的问题在代码行中:

        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)
    

    这只是一个函数调用(分布在多行中)。这个函数或者返回一个列表/元组的列表/元组(每个都有两个值),类似于我的上一个示例,或者这个函数是一个生成器函数,每次通过循环产生两个值。

    【讨论】:

      猜你喜欢
      • 2013-08-31
      • 2021-08-24
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2010-11-04
      相关资源
      最近更新 更多