總結(jié)了一下歹鱼,需要注意的兩個點。
- 關(guān)于python擴展文件語法以及其導(dǎo)入的第三方包版本問題
在ub代碼中引用python擴展時竞慢,需要確保引用的.py文件語法能夠被ub內(nèi)置的python識別,比如creator 5.1.1版本內(nèi)置的是python 3.7,如果你是用python2的語法就會出現(xiàn)兼容問題
同樣的斑举,當你使用的python擴展中導(dǎo)入了自行安裝的第三方python包時,你需要確保該第三方擴展包對應(yīng)的python版本和ub內(nèi)置的python版本兼容病涨,比如說你在py文件里導(dǎo)入了python 3.8版本的bs4富玷,在ub里導(dǎo)入就會出現(xiàn)不兼容導(dǎo)致無法導(dǎo)入的問題
- ub數(shù)據(jù)類型和python數(shù)據(jù)類型的兼容問題
實際上,ub和python之間的數(shù)據(jù)類型兼容做的還是很不錯的既穆,基礎(chǔ)的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)都可以相互兼容赎懦,我們來看幾個例子。
python代碼(dongyu.py)
# 這個py文件定義了一個函數(shù)幻工,接收一個列表類型作為參數(shù)励两,對列表進行處理后返回處理過的列表。
def fib(array):
data = array.pop(0)
return data
ub代碼
//傳入一個ub數(shù)組給python fib函數(shù)
import dongyu
dim data, result
data = [1,2,3]
result = dongyu.fib(data)
TracePrint(result)
執(zhí)行代碼囊颅,可以看到運行成功伐蒋,輸出結(jié)果為:
可見工三,ub的數(shù)組和python的列表是可以直接兼容的。
ub與python間可以直接兼容的類型:
ub int ---- python int
ub float ---- python float
ub string ---- python str
ub array ---- python list
ub set ---- python set
ub dictionary ---- python dict
那么不能直接兼容的類型如何進行處理呢先鱼?
在python擴展中返回的特殊python類型(比如narray俭正、bs4 dom),在ub代碼里是不能直接操作的焙畔,比如bs4 dom在python里有g(shù)et_text()方法掸读,但你無法在ub里使用 dom.get_text(),那有沒有辦法解決呢宏多?我們來看一個例子:
首先寫一段python代碼保存為dongyu.py
import numpy
def fib8():
data = numpy.array([[1,2,3],[4,5,6]])
return data
def fib9(narray):
return narray.shape
代碼中的fib8()函數(shù)返回一個narray類型儿惫,我們想獲取它的shape屬性,在ub里是不能對narray進行操作的:
雖然不能在ub里操作伸但,但ub不會改變它的數(shù)據(jù)結(jié)構(gòu)肾请,我們可以在ub里把它傳回python中的fib9()函數(shù),再返回我們需要的結(jié)果:
這個用法還是非常方便的更胖,比如我們需要用到python的bs4庫解析html時铛铁,如果為避免兼容性問題,在python代碼里用一個函數(shù)寫完全部邏輯非常不方便却妨,很容易把代碼寫死饵逐,而ub支持用python類型進行傳參,就可以靈活解決這類問題了彪标。
以上就是本文的全部內(nèi)容了倍权,我是寫代碼的周冬雨,覺得本文有用就點擊下面的贊賞吧哇哈哈~