c++程序转python的注意事项

经常涉及将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

你可能感兴趣的:(c++程序转python的注意事项)