uibot中使用python擴(kuò)展之兼容性問題

總結(jié)了一下,需要注意的兩個(gè)點(diǎn)。

  1. 關(guān)于python擴(kuò)展文件語法以及其導(dǎo)入的第三方包版本問題
  • 在ub代碼中引用python擴(kuò)展時(shí),需要確保引用的.py文件語法能夠被ub內(nèi)置的python識別,比如creator 5.1.1版本內(nèi)置的是python 3.7,如果你是用python2的語法就會出現(xiàn)兼容問題

  • 同樣的,當(dāng)你使用的python擴(kuò)展中導(dǎo)入了自行安裝的第三方python包時(shí),你需要確保該第三方擴(kuò)展包對應(yīng)的python版本和ub內(nèi)置的python版本兼容,比如說你在py文件里導(dǎo)入了python 3.8版本的bs4,在ub里導(dǎo)入就會出現(xiàn)不兼容導(dǎo)致無法導(dǎo)入的問題

  1. ub數(shù)據(jù)類型和python數(shù)據(jù)類型的兼容問題
    實(shí)際上,ub和python之間的數(shù)據(jù)類型兼容做的還是很不錯(cuò)的,基礎(chǔ)的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)都可以相互兼容,我們來看幾個(gè)例子。

python代碼(dongyu.py)

# 這個(gè)py文件定義了一個(gè)函數(shù),接收一個(gè)列表類型作為參數(shù),對列表進(jìn)行處理后返回處理過的列表。
def fib(array):
    data = array.pop(0)
    
    return data

ub代碼

//傳入一個(gè)ub數(shù)組給python fib函數(shù)
import dongyu

dim data, result
data = [1,2,3]

result = dongyu.fib(data)
TracePrint(result)

執(zhí)行代碼,可以看到運(yùn)行成功,輸出結(jié)果為:


image.png

可見,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

那么不能直接兼容的類型如何進(jìn)行處理呢?

在python擴(kuò)展中返回的特殊python類型(比如narray、bs4 dom),在ub代碼里是不能直接操作的,比如bs4 dom在python里有g(shù)et_text()方法,但你無法在ub里使用 dom.get_text(),那有沒有辦法解決呢?我們來看一個(gè)例子:

首先寫一段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ù)返回一個(gè)narray類型,我們想獲取它的shape屬性,在ub里是不能對narray進(jìn)行操作的:


image.png

雖然不能在ub里操作,但ub不會改變它的數(shù)據(jù)結(jié)構(gòu),我們可以在ub里把它傳回python中的fib9()函數(shù),再返回我們需要的結(jié)果:


image.png

這個(gè)用法還是非常方便的,比如我們需要用到python的bs4庫解析html時(shí),如果為避免兼容性問題,在python代碼里用一個(gè)函數(shù)寫完全部邏輯非常不方便,很容易把代碼寫死,而ub支持用python類型進(jìn)行傳參,就可以靈活解決這類問題了。

以上就是本文的全部內(nèi)容了,我是寫代碼的周冬雨,覺得本文有用就點(diǎn)擊下面的贊賞吧哇哈哈~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容