Python是這些庫(kù)的API binding,使用Python是因?yàn)镃Python的膠水語(yǔ)言特性,要開(kāi)發(fā)一個(gè)其他語(yǔ)言到C/C++的跨語(yǔ)言接口,Python是最容易的,比其他語(yǔ)言的ffi門(mén)檻要低不少,尤其是使用Cython的時(shí)候。其他語(yǔ)言的ffi許多都只能導(dǎo)入C的函數(shù)入口點(diǎn),復(fù)雜的數(shù)據(jù)結(jié)構(gòu)大多只能手工用byte數(shù)組拼起來(lái),如果還需要回調(diào)函數(shù)輸入那就無(wú)計(jì)可施了。而CPython的C API是雙向融合的,可以直接對(duì)外暴露封裝過(guò)的Python對(duì)象,還可以允許用戶通過(guò)繼承這些自定義對(duì)象來(lái)引入新特性,甚至可以從C代碼當(dāng)中再調(diào)用Python的函數(shù)(當(dāng)然,也有一定的條件限制)。不過(guò)這也是PyPy這樣的JIT解釋器的一個(gè)障礙。
而且Python歷史上也一直都是科學(xué)計(jì)算和數(shù)據(jù)分析的重要工具,有numpy這樣的底子,因?yàn)樾袠I(yè)近似所以選擇API binding語(yǔ)言的時(shí)候會(huì)首選Python,同時(shí)復(fù)用numpy這樣的基礎(chǔ)庫(kù)既減少了開(kāi)發(fā)工作量,也方便從業(yè)人員上手。
想要了解更多關(guān)于人工智能資訊信息,請(qǐng)關(guān)注中培偉業(yè)李老師二維碼:
