RPA艺赛旗 RPA

uibot中使用python扩展之兼容性问题

2020-09-07  本文已影响0人  周冬雨_

总结了一下,需要注意的两个点。

  1. 关于python扩展文件语法以及其导入的第三方包版本问题
  1. 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类型进行传参,就可以灵活解决这类问题了。

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

上一篇下一篇

猜你喜欢

热点阅读