简介
在表达式模式下,用户可以输入一个合法的 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 | 数据引用 | 通过下拉点选自动生成对应标签 | 从上下文数据中引用指定路径的数据 |
数据类型
数据类型 | 绑定腾讯轻联核心类型 | 特性使用 | 特性类型 | 特性功能 | 输出类型 |
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 |