在表达式模式下,用户可以输入一个合法的 Python 表达式以返回所需要的数据。表达式模式经过针对性优化,提供智能提示功能简化了用户输入的同时,性能相较代码模式进一步获得提升。
对于任意 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:ii for i in range(10)} | 通过推导构造一个字典 | |
generator | 生成器构造 | (kk for k in range(10)) | 返回一个生成器 | |
原型表达式 | attr | 属性引用 | msg.payload | 返回属性 |
index | 容器下标取值 | msg.payload[1]、msg.vars['a'] | 指定下标 | |
slice | 切片下标 | msg.payload[1:3] | 指定下标 | |
call | 调用 | str('a') | 函数调用 | |
数学表达式 | binop | 二元操作符 | 33、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 | 数据引用 | 通过下拉点选自动生成对应标签 | 从上下文数据中引用指定路径的数据 |
数据类型 | 绑定数据连接器核心类型 | 特性使用 | 特性类型 | 特性功能 | 输出类型 |
---|---|---|---|---|---|
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 |
表达式模式提供多样的类型方法、内置函数和第三方模块,用户可以按需选用,快速实现既定功能,详情请参阅 表达式模式附录。