經常涉及將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