腾讯轻联 表达式模式

在表达式模式下,用户可以输入一个合法的 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

四、其他支持

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

赞 (0)
上一篇 4天前
下一篇 4天前