天天看點

python 自動化辦公 uibot_uibot中使用python擴充之相容性問題

總結了一下,需要注意的兩個點。

關于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)

執行代碼,可以看到運作成功,輸出結果為:

python 自動化辦公 uibot_uibot中使用python擴充之相容性問題

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進行操作的:

python 自動化辦公 uibot_uibot中使用python擴充之相容性問題

image.png

雖然不能在ub裡操作,但ub不會改變它的資料結構,我們可以在ub裡把它傳回python中的fib9()函數,再傳回我們需要的結果:

python 自動化辦公 uibot_uibot中使用python擴充之相容性問題

image.png

這個用法還是非常友善的,比如我們需要用到python的bs4庫解析html時,如果為避免相容性問題,在python代碼裡用一個函數寫完全部邏輯非常不友善,很容易把代碼寫死,而ub支援用python類型進行傳參,就可以靈活解決這類問題了。

以上就是本文的全部内容了,我是寫代碼的周冬雨,覺得本文有用就點選下面的贊賞吧哇哈哈~