經(jīng)常涉及將C++程序轉(zhuǎn)換成python程序,其中有些不同,在調(diào)試中避免犯錯(cuò)征炼,記錄下來(lái)共享給大家析既。
1 除法
在c++中,首先要定義類型谆奥,比如整形眼坏,做完除法后還保持原來(lái)類型。在python中由于類型是動(dòng)態(tài)確定酸些,在除法時(shí)需要區(qū)別是整除還是一般除法宰译。另一種解決方案就是提前確定python變量類型。
int a, b, c;
a = 7;
b = 2;
c = a/b;
對(duì)應(yīng)python程序如下
import numpy as np
a = 7
b = 2
c = a//b
2 for 循環(huán)
c++和python的for循環(huán)區(qū)別在于循環(huán)的最后一次判斷魄懂,c++的最后一次變量增加和判斷都進(jìn)行沿侈,而python則沒有,因此需要特別注意在for循環(huán)中的一些操作市栗。
int i, j,c;
for(i=0,j=0;i < 4;i++,j++);
print("%d %d",i,j);
要實(shí)現(xiàn)最后一次判斷需要使用python for else結(jié)構(gòu)
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中與表達(dá)式和python有些不同, 3 && 2 在c++中表示true缀拭,這是一個(gè)邏輯表達(dá)式, 在python中 3 and 2 表示2肃廓,這是一個(gè)算術(shù)式智厌。
c++中指針作為一個(gè)整形值來(lái)處理,可以進(jìn)行判斷盲赊。python類的引用作為對(duì)象來(lái)處理铣鹏,不能使用not進(jìn)行判斷。
4 指針與numpy
在c++中經(jīng)常使用指針哀蘑,針對(duì)某個(gè)固定的地址進(jìn)行操作诚卸,而python一切皆對(duì)象,特別如切片等操作都是新生成一個(gè)對(duì)象绘迁,這與c++中進(jìn)行指針的移動(dòng)合溺,操作同一對(duì)象不符。使用numpy生成空間缀台,在進(jìn)行對(duì)象引用傳遞的時(shí)候棠赛,可以保持操作同一片地址空間,這與指針操作有異曲同工之妙膛腐。
5 c的初始化
使用c寫的python庫(kù)的時(shí)候有個(gè)隱含bug睛约,我們知道C語(yǔ)言的變量使用前有清零的動(dòng)作,這個(gè)行為在python中也需要哲身,否則就會(huì)出現(xiàn)debug和release的值不相同的詭異現(xiàn)象辩涝。筆者使用bitarray的時(shí)候就出現(xiàn)過不初始化就有bug