Python中的for循环与C++有何不同
How is for loop in Python different from C++?
for i in range(5):
if (i==2):
i =i -1
print(i)
我得到了0,1,1,3,4(一个有限的结果(当我使用C++时
#include<iostream>
using namespace std;
int main(){
for (int i=0;i<10;i++){
if(i==2){
i = i-1;
}
cout<<(i)<<endl;
}
}
我得到了无穷大的输出,Python代码在达到值2后也应该输出无穷大。不明白为什么我得到了不同的结果?
在Python中,您可以创建range(5)
,即一组0, 1, 2, 3, 4
。当你对它进行迭代时,它正是这样做的——第一个循环取i=0
,迭代完成后取下一个元素i=1
,依此类推。在循环内更改i
的值不会更改下一个项目。
然而,在C/C++中,您可以直接对i
变量进行操作。您并没有创建一组预定义的值。您可以根据需要对其进行修改。
你可以实现";Python风格">用于C++中的循环,使用范围用于循环:
for (int i: { 0, 1, 2, 3, 4 } ) {
if(i==2) {
i = i-1;
}
std::cout<< i << std::endl;
}
C++中python for循环的等价物如下:
#include<iostream>
using namespace std;
int main(){
int foo[5] = {0, 1, 2, 3, 4};
int i;
for (i=0; i<5; i++){
int val = foo[i];
if(val == 2){
val = val - 1;
}
cout<<(val)<<endl;
}
}
哪个收益率:
0
1
1
3
4
range()
函数为您提供了一个迭代器,类似于上面的foo
(在函数中(,i
从迭代器中获取值&用于for循环的主体中。如果在正文中重新分配i
,则在下一次循环运行时,该更改就会丢失,因为i
是在循环开始时重新分配的。因此,与C++不同,更改循环中使用的变量不会修改循环的状态。
在python中:
你只会得到一个";"复制";,您可以在不更改循环计数器的情况下按自己喜欢的方式进行更改。
在C++中:
你改变循环计数器本身,这会导致无休止的循环
注意:
如果你想测试它,只需在for循环的开头放一个print语句print('--', i)
,你就可以清楚地了解发生了什么。
在c++中,您正在递增循环开始时存储在i中的值。
在python中,在开始时为i赋值,然后如果它等于2,则从中减去1。
与c++中的python代码等效的是
for(int i : {1, 2, 3, 4, 5})
{
if(i==2)
i = i-1;
std::cout<<i<<std::endl;
}
让我们分解循环,帮助您更好地理解为什么会发生这种情况。
首先,理解range(...)
很重要。在python中,range(5)
或list(range(5))
返回[0,1,2,3,4],这是一个list
。range(...)
总是返回一个列表,因此当您在python中使用for循环时,您实际上不是在增加实际值,而是在使用range(…(生成的值列表上循环,即使您修改了值,更改也是暂时的,因为一旦迭代结束,循环变量将被分配使用CCD_ 18 生成的列表中的下一个值
c++的情况并非如此。在c++中,循环的工作方式不同,只要循环变量(i(<10(在你的情况下(。没有生成列表或数组,您使用的是整数值,应用于i
的任何更改都不会消失,因为在迭代结束时,i
将变为i=i+1
。
这相当于您的python代码:
for i in [0, 1, 2, 3, 4]:
if (i==2):
i =i -1 # temporary assignment to i-1=2-1 = 1
# temporary because after the loop ends i would become the next value in the list i.e 3
print(i)
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 无论代码长度如何,以下代码的内存要求有何不同?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- std::u8string与std::string有何不同?
- 两种类型转换有何不同?
- 这个语句到底是什么意思 stack<int, list<int> > 它与 stack 有何不同<int>?
- 英特尔®事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
- 指向成员函数的指针与指向数据成员的指针有何不同
- 字符 * 和字符串在C++中有何不同?(在描述中编写代码)
- 在C++中,Mixin与面向策略的设计有何不同
- "cin>>"与"cin.get"有何不同?还是不是?
- C++11: boost::make_tuple 与 std::make_tuple 有何不同?
- 双重列表复制构造函数:与单一列表复制构造函数有何不同
- 在C++中声明可见性/访问权限的方法有何不同