我喜欢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源代码我认为必须有一个很好的理由吗?
答案 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语句,从而使连接不那么明显。