有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

简介

在表达式模式下,用户可以输入一个合法的 Python 表达式以返回所需要的数据。表达式模式经过针对性优化,提供智能提示功能简化了用户输入的同时,性能相较代码模式进一步获得提升。




IDE 使用

对于任意 Dataway 编辑文本框,将鼠标移至编辑文本框,会自动弹出模式选择按钮,单击表达式模式,再单击文本框即可填写表达式。



语法检查
在 Dataway 交互界面中,能够实时对表达式进行语法检查,如果出错,将标红文本框,并在文本框下侧提示错误。
用户可以根据错误提示来对表达式进行修改,只有当流中所有表达式均通过语法检查才能进行发布。



自动补全
在编辑框中进行输入时,Dataway 交互界面能够根据当前上下文自动给出语法提示和可行补全方案,并展示在文本框的上/下侧。用户可以通过点选对应标签快速补全表达式。语法提示的范围包括属性、方法、内置函数和第三方模块。



集成流数据面板引用
表达式模式支持 集成流数据面板 引用功能,详情请见 集成流数据面板



类型转换
除了部分组件对 Dataway 交互界面有特殊要求外,表达式模式支持便捷类型转换功能。用户可以通过点选文本框左侧的下拉菜单中所需的数据类型,对表达式输出结果进行显式的类型转换,强制其符合用户对数据类型的使用需求。类型选择默认为 any,即不进行类型转换。




语法

表达式模式对标 Python3 语法的 eval() 函数以降低用户使用门槛。与代码模式一致,表达式模式可以通过 msg(Message 类型)引用当前的集成流消息。同时,表达式模式支持 集成流数据面板 快捷引用前置组件的输出数据。
表达式模式支持的语法结构如下:
表达式分组
表达式类型
释义
举例
说明
原子表达式
literal
字面量
"abc"、123、True、b'abc'
例如 string、int、float、bool、bytes等类型的字面量
name
标识符
abc
从全局上下文中读取指定名称的变量
tuple
元组构造
('a', 'b', 'c')、(str(1))
若至少有一个逗号,则返回元组;否则返回单个表达式的值
list
列表构造
[1,2,3]
枚举元素,构造一个列表
list-comp
列表推导式
[i for i in 'abc']
通过推导构造一个列表
set
集合构造
{1,2,'a'}
枚举元素,构造一个集合
set-comp
集合推导式
{i for in 'abc'}
通过推导构造一个集合
dict
字典构造
{1:2, 'a':'b', 3.0:True}
枚举元素,构造一个字典
dict-comp
字典推导式
{i:i*i for i in range(10)}
通过推导构造一个字典
generator
生成器构造
(k*k for k in range(10))
返回一个生成器
原型表达式
attr
属性引用
msg.payload
返回属性
index
容器下标取值
msg.payload[1]、msg.vars['a']
指定下标
slice
切片下标
msg.payload[1:3]
指定下标
call
调用
str('a')
函数调用
数学表达式
binop
二元操作符
3**3、3+3、'a' is not in msg.vars
幂运算(**)、算数运算(+、-、*、/、//、%)、移位运算(>>、<<)、位运算(&、^、|)、比较运算(>、>=、<、<=、==、!=、is、is not、in、not in)
uniop
一元操作符
not msg.vars、~msg.vars['no']
取自身+、取负-、取反~、逻辑非not
条件表达式
if-expr
条件表达式
'a' if 's' in msg.vars else 'b'
xx if True else xx
logical
逻辑表达式
a and b、not True
布尔运算(and、not、or)
特殊表达式
dataref
数据引用
通过下拉点选自动生成对应标签
从上下文数据中引用指定路径的数据

数据类型

表达式模式在 Python 原生类型的基础上充分支持腾讯云腾讯轻联 核心类型,对于已绑定腾讯轻联核心类型的数据类型,其数据可以在组件与 Dataway 之间自由流通。
数据类型
绑定腾讯轻联核心类型
特性使用
特性类型
特性功能
输出类型
int
整数
+
操作符
加法
int
-
操作符
减法
int
*
操作符
乘法
int
/
操作符
除法
float
//
操作符
整除
int
%
操作符
取余
int
-x
操作符
取反
int
&
操作符
按位与
int
|
操作符
按位或
int
^
操作符
按位异或
int
~
操作符
按位取反
int
<<
操作符
左移
int
>>
操作符
右移
int
<
操作符
小于
bool
>
操作符
大于
bool
<=
操作符
小于等于
bool
>=
操作符
大于等于
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
str
字符串
+
操作符
拼接
str
*
操作符
重复
str
[index]
下标操作
取指定 index 的值
str
[index1:index2]
下标操作
取切片
str
[index1:index2:step]
下标操作
按步长取切片
str
in
操作符
是否子串
bool
%
操作符
格式化
str
==
操作符
等于
bool
!=
操作符
不等于
bool
bool
布尔值
or
操作符
bool
and
操作符
bool
not
操作符
取反
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
float
浮点数
+
操作符
加法
float
-
操作符
减法
float
*
操作符
乘法
float
/
操作符
除法
float
//
操作符
整除
float
%
操作符
取余
float
-x
操作符
取反
float
<
操作符
小于
bool
>
操作符
大于
bool
<=
操作符
小于等于
bool
>=
操作符
大于等于
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
bytes
(非核心类型)
+
操作符
拼接
bytes
*
操作符
重复
bytes
[index]
下标操作
取指定 index 的值
int
[index1:index2]
下标操作
取切片
bytes
[index1:index2:step]
下标操作
按步长取切片
bytes
in
操作符
是否子串
bool
%
操作符
格式化
bytes
==
操作符
等于
bool
!=
操作符
不等于
bool
list
列表
+
操作符
拼接
list
*
操作符
重复
list
[index]
下标操作
取指定 index 的值
any
[index1:index2]
下标操作
取切片
list
[index1:index2:step]
下标操作
按步长取切片
list
in
操作符
是否元素
bool
<
操作符
逐项小于
bool
>
操作符
逐项大于
bool
<=
操作符
逐项小于等于
bool
>=
操作符
逐项大于等于
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
dict
字典
[key]
下标操作
取指定key的值
any
==
操作符
等于
bool
!=
操作符
不等于
bool
set
(非核心类型)
&
操作符
交集
set
|
操作符
并集
set
-
操作符
减法
set
<
操作符
是否真子集
bool
>
操作符
是否真超集
bool
<=
操作符
是否子集
bool
>=
操作符
是否真超集
bool
in
操作符
是否元素
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
decimal.Decimal
十进制
+
操作符
加法
decimal
-
操作符
减法
decimal
*
操作符
乘法
decimal
/
操作符
除法
decimal
%
操作符
取余
decimal
-x
操作符
取反
decimal
<
操作符
小于
bool
>
操作符
大于
bool
<=
操作符
小于等于
bool
>=
操作符
大于等于
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
datetime.datetime
时刻
year
属性
int
month
属性
int
day
属性
int
hour
属性
int
minute
属性
int
second
属性
int
microsecond
属性
微秒
int
+
操作符
推进
datetime.datetime
-
操作符
求时间间隔
datetime.timedelta
<
操作符
小于
bool
>
操作符
大于
bool
<=
操作符
小于等于
bool
>=
操作符
大于等于
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
datetime.date
日期
year
属性
int
month
属性
int
day
属性
int
strftime(format)
方法
格式化
str
+
操作符
推进
datetime.date
-
操作符
求时间间隔
datetime.timedelta
<
操作符
小于
bool
>
操作符
大于
bool
<=
操作符
小于等于
bool
>=
操作符
大于等于
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
datetime.time
时钟
hour
属性
int
minute
属性
int
second
属性
int
microsecond
属性
微秒
int
<
操作符
小于
bool
>
操作符
大于
bool
<=
操作符
小于等于
bool
>=
操作符
大于等于
bool
==
操作符
等于
bool
!=
操作符
不等于
bool
Entity
二进制实体
from_bytes(bs,mime_type=None, encoding="utf-8")
静态方法
从二进制构建Entity
Entity
from_value(obj,mime_type=None, encoding="utf-8")
静态方法
从数据构建Entity
Entity
get(key,dafault=None)
方法
获取数据
any
[key]
下标操作
取指定key的值
any
[^value]
下标操作
取解析后的值
any
[^blob]
下标操作
取二进制原始数据
bytes
RecordSet
数据集
schema()
方法
获取schema
dict
Record
单条数据
[key]
下标操作
取指定key的值
any
Message
消息
payload
属性
返回输出
any
attrs
属性
返回属性
dict
vars
属性
返回变量
dict
id
属性
返回消息唯一标志
str
seq_id
属性
返回流序列号
str
error
属性
返回错误
dict
isthrowing
属性
是否抛错
bool

其他支持

表达式模式提供多样的类型方法、内置函数和第三方模块,用户可以按需选用,快速实现既定功能,详情请参见 表达式模式附录