總結了一下,需要注意的兩個點。
關于python擴充檔案文法以及其導入的第三方包版本問題
在ub代碼中引用python擴充時,需要確定引用的.py檔案文法能夠被ub内置的python識别,比如creator 5.1.1版本内置的是python 3.7,如果你是用python2的文法就會出現相容問題
同樣的,當你使用的python擴充中導入了自行安裝的第三方python包時,你需要確定該第三方擴充包對應的python版本和ub内置的python版本相容,比如說你在py檔案裡導入了python 3.8版本的bs4,在ub裡導入就會出現不相容導緻無法導入的問題
ub資料類型和python資料類型的相容問題
實際上,ub和python之間的資料類型相容做的還是很不錯的,基礎的資料類型和資料結構都可以互相相容,我們來看幾個例子。
python代碼(dongyu.py)
# 這個py檔案定義了一個函數,接收一個清單類型作為參數,對清單進行處理後傳回處理過的清單。
def fib(array):
data = array.pop(0)
return data
ub代碼
//傳入一個ub數組給python fib函數
import dongyu
dim data, result
data = [1,2,3]
result = dongyu.fib(data)
TracePrint(result)
執行代碼,可以看到運作成功,輸出結果為:
image.png
可見,ub的數組和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裡有get_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()函數傳回一個narray類型,我們想擷取它的shape屬性,在ub裡是不能對narray進行操作的:
image.png
雖然不能在ub裡操作,但ub不會改變它的資料結構,我們可以在ub裡把它傳回python中的fib9()函數,再傳回我們需要的結果:
image.png
這個用法還是非常友善的,比如我們需要用到python的bs4庫解析html時,如果為避免相容性問題,在python代碼裡用一個函數寫完全部邏輯非常不友善,很容易把代碼寫死,而ub支援用python類型進行傳參,就可以靈活解決這類問題了。
以上就是本文的全部内容了,我是寫代碼的周冬雨,覺得本文有用就點選下面的贊賞吧哇哈哈~