总结了一下,需要注意的两个点。
关于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类型进行传参,就可以灵活解决这类问题了。
以上就是本文的全部内容了,我是写代码的周冬雨,觉得本文有用就点击下面的赞赏吧哇哈哈~