经常涉及将C++程序转换成python程序,其中有些不同,在调试中避免犯错,记录下来共享给大家。
1 除法
在c++中,首先要定义类型,比如整形,做完除法后还保持原来类型。在python中由于类型是动态确定,在除法时需要区别是整除还是一般除法。另一种解决方案就是提前确定python变量类型。
int a, b, c;
a = 7;
b = 2;
c = a/b;
对应python程序如下
import numpy as np
a = 7
b = 2
c = a//b
2 for 循环
c++和python的for循环区别在于循环的最后一次判断,c++的最后一次变量增加和判断都进行,而python则没有,因此需要特别注意在for循环中的一些操作。
int i, j,c;
for(i=0,j=0;i < 4;i++,j++);
print("%d %d",i,j);
要实现最后一次判断需要使用python for else结构
j = 0
for i in range(4):
j += 1
else:
i += 1
j = 0
for i in range(4):
if i == 2:
j += 1
continue
j += 1
else:
i += 1
3 与
在c中与表达式和python有些不同, 3 && 2 在c++中表示true,这是一个逻辑表达式, 在python中 3 and 2 表示2,这是一个算术式。
c++中指针作为一个整形值来处理,可以进行判断。python类的引用作为对象来处理,不能使用not进行判断。
4 指针与numpy
在c++中经常使用指针,针对某个固定的地址进行操作,而python一切皆对象,特别如切片等操作都是新生成一个对象,这与c++中进行指针的移动,操作同一对象不符。使用numpy生成空间,在进行对象引用传递的时候,可以保持操作同一片地址空间,这与指针操作有异曲同工之妙。
5 c的初始化
使用c写的python库的时候有个隐含bug,我们知道C语言的变量使用前有清零的动作,这个行为在python中也需要,否则就会出现debug和release的值不相同的诡异现象。笔者使用bitarray的时候就出现过不初始化就有bug