View a markdown version of this page

代码 - Amazon Quick

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

代码

Quick Automate 中的代码操作允许您使用 Python 代码块实现自定义逻辑,这超出了标准自动化操作所支持的范围。它们非常适合复杂的数据转换和计算,并且可以在受限的 Python 环境中运行以维护安全。

两种类型的代码操作:

  • 单行表达式:快速的单行操作,可在不返回值的情况下修改变量

  • 自定义代码块:用于带有参数和返回值的复杂逻辑的 Multi-line Python 函数

何时使用代码操作:

在需要时使用代码块:

  • 执行标准操作中不提供的复杂数据转换

  • 实现自定义业务逻辑或计算

  • 处理或操作数据结构(列表、字典、JSON)

  • 以自定义方式处理日期、时间和时区

  • 解析或格式化具有复杂模式的字符串

  • 通过将多个操作整合到一个代码块中来优化自动化性能

何时不使用代码操作:

在以下情况下避免使用代码块:

  • 您的用例已经存在标准自动化操作

  • 该操作非常简单,可以进行内置操作

  • 你需要与外部 API 进行交互(改用 REST API 集成)

  • 您需要访问文件系统或数据库(使用适当的集成)

如何访问代码操作:

代码块可通过多个接口使用:

  • 操作面板(推荐):

    • 在自动化生成器中打开您的自动化

    • 点击右侧的动作面板

    • 在 “代码操作” 部分下找到 “自定义代码块”

    • 将代码块拖放到您的自动化工作流程中

  • 使用助手构建:

    • 当助手确定需要自定义代码时,可在计划生成期间使用

    • 助手会自动为复杂操作推荐代码块

    • 您可以通过描述您的自定义逻辑需求来请求代码块

可用操作:

单行表达式

单行表达式执行单行 Python 语句,这些语句在不返回值的情况下执行操作。它们非常适合快速修改现有变量,例如追加到列表、更新字典或执行修改状态的简单计算。

特性:

  • 表达式(必填):要执行的 Python 表达式(例如,“my_list.append('新项目')”)

示例:

  • 追加到清单

    my_list.append("1") my_list.append(new_item)
  • 移除列表项

    task_list.remove(completed_task)

自定义代码块

自定义代码块是执行复杂逻辑、接受参数和返回值的多行 Python 函数。当标准自动化操作和单行表达式不足以满足您的需求时,它们是备用选项。

特性:

  • 函数标题(必填):代码块的名称标识符(例如,Calculate_Total“”)

  • 函数(必填):包含您的自定义逻辑的 Python 代码块。

    • 步骤 1:定义参数

      • 单击 “编辑” 按钮打开代码编辑器

      • 在 “参数” 面板中,单击 “添加” 以创建新参数

      • 输入与您的自动化变量相匹配的参数名称

      • 参数可用作函数参数

    • 第 2 步:编写你的 Python 代码

  • 返回值(可选):用于存储函数输出的变量名

    • 遵循所需的代码块结构(见下文)

    • 在函数中实现您的自定义逻辑

    • 仅使用经批准的库和内置函数

    • 如果需要输出数据,请包括返回语句

代码块结构

所有代码块都必须遵循以下特定格式:

@code_block() def your_function_name(parameter1, parameter2, parameter3): ------------------------------------------------------------------------------------- """ Optional: Add a docstring describing what your function does """ # Your custom logic here result = parameter1 + parameter2 + parameter3 return result

Built-in Python 函数和导入

所有标准的 Python 内置函数都无需导入即可使用(len、str、int 等)

已批准的标准库(安全性受限)

代码块只能导入以下标准库:

  • base64-Base64 encoding/decoding

  • datetime-日期和时间操作

  • json-JSON 解析和生成

  • math-数学函数

  • re-正则表达式

  • zoneinfo-时区处理

注意
  • 无法导入除上面列出的标准库之外的标准库。

  • 无法安装或导入第三方库。 pip install在代码块中不支持。

限制

  • Python 环境受限,库访问权限有限。执行环境基于 Python 3.10 的一个子集。 RestrictedPython

  • 代码块无法调用其他代码块或操作

最佳实践

  • 保持代码块的简单性和针对性

  • 使用描述性函数名称

  • 如果可用,请始终首选预先构建的操作

  • 彻底测试您的代码块(因为有针对性的调试选项有限)

使用案例示例

  • 数学运算(计算圆形属性-半径作为参数

    def function (radius): return { "radius": radius, "diameter": 2 * radius, "circumference": round(2 * math.pi * radius, 2), "area": round(math.pi * radius ** 2, 2) }
  • 获取最新消息 date/time

    def function (): now = datetime.datetime.now() return { "current_date": now.strftime("%Y-%m-%d"), "current_time": now.strftime("%H:%M:%S"), "formatted": now.strftime("%B %d, %Y at %I:%M %p"), "iso_format": now.isoformat(), "timestamp": now.timestamp() }
  • 计算日期差异-以开始日期和结束日期为参数

    def function _(start_date_str, end_date_str): # Parse date strings (format: YYYY-MM-DD)_ start = datetime.datetime.strptime(start_date_str, "%Y-%m-%d") end = datetime.datetime.strptime(end_date_str, "%Y-%m-%d") _# Calculate difference_ difference = end - start return { "days": difference.days, "weeks": difference.days // 7, "start": start_date_str, "end": end_date_str }
  • 使用正则表达式进行模式匹配和文本操作(验证电子邮件地址、电话号码等)

    def function (email, phone, zip_code): email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' phone_pattern = r'^\d{3}-\d{3}-\d{4}$' zip_pattern = r'^\d{5}(-\d{4})?$' return { "email_valid": bool(re.match(email_pattern, email)), "phone_valid": bool(re.match(phone_pattern, phone)), "zip_valid": bool(re.match(zip_pattern, zip_code)) }
  • 列表操作(筛选和转换列表)

    def function (numbers, threshold): # Filter numbers above threshold and calculate statistics filtered = [n for n in numbers if n > threshold] if filtered: return { "filtered_numbers": filtered, "count": len(filtered), "sum": sum(filtered), "average": sum(filtered) / len(filtered), "min": min(filtered), "max": max(filtered) } else: return { "filtered_numbers": [], "count": 0, "message": "No numbers above threshold" }