本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
代码
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/decodingdatetime-日期和时间操作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" }