python兼容性问题_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)

执行代码,可以看到运行成功,输出结果为:

94da0d615a21?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

94da0d615a21?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

虽然不能在ub里操作,但ub不会改变它的数据结构,我们可以在ub里把它传回python中的fib9()函数,再返回我们需要的结果:

94da0d615a21?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

这个用法还是非常方便的,比如我们需要用到python的bs4库解析html时,如果为避免兼容性问题,在python代码里用一个函数写完全部逻辑非常不方便,很容易把代码写死,而ub支持用python类型进行传参,就可以灵活解决这类问题了。

以上就是本文的全部内容了,我是写代码的周冬雨,觉得本文有用就点击下面的赞赏吧哇哈哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值