Python源代码使用for(;;)而不是while的重点是什么?

时间:2017-03-07 04:35:50

标签: c cpython

我喜欢python,想要贡献。我在cpython源代码中遇到了这一行。

for (;;) {
    item = iternext(it);
    if (item == NULL)
        break;
    cmp = PyObject_IsTrue(item);
    Py_DECREF(item);
    if (cmp < 0) {
        Py_DECREF(it);
        return NULL;
    }
    if (cmp > 0) {
        Py_DECREF(it);
        Py_RETURN_TRUE;
    }
}

使用for(;;)

的重点是什么
if (item == NULL)
        break;

而不是while(item!=NULL)是因为程序员希望iternext(it)至少执行一次?这对我来说似乎不太直观,但是因为它的python源代码我认为必须有一个很好的理由吗?

1 个答案:

答案 0 :(得分:2)

这是一个在中间退出的循环。要使它成为一个行为相同的while循环,你必须编写

<% if params[:controller] == 'users' && params[:id] == curent_user.id %>
  <%= render 'users/show' %>
<% end %>

但这意味着重复一行;它还使第二个item = iternext(it); while (item != NULL) { cmp = PyObject_IsTrue(item); Py_DECREF(item); if (cmp < 0) { Py_DECREF(it); return NULL; } if (cmp > 0) { Py_DECREF(it); Py_RETURN_TRUE; } item = iternext(it); } 远离while语句,从而使连接不那么明显。