本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Code
Quick Automate 中的程式碼動作可讓您使用 Python 程式碼區塊實作自訂邏輯,超越標準自動化動作支援的範圍。它們非常適合複雜的資料轉換和計算,並在受限的 Python 環境中執行,以維護安全性。
兩種類型的程式碼動作:
單行表達式:快速的單行操作,可修改變數而不傳回值
自訂程式碼區塊:具有參數和傳回值的複雜邏輯的多行 Python 函數
何時使用程式碼動作:
當您需要以下項目時,請使用程式碼區塊:
執行標準動作中無法使用的複雜資料轉換
實作自訂商業邏輯或計算
處理或操作資料結構 (清單、字典、JSON)
以自訂方式使用日期、時間和時區
複雜模式的剖析或格式字串
透過將多個動作合併為一個程式碼區塊來最佳化自動化效能
不使用程式碼動作時:
避免程式碼區塊發生下列情況:
您的使用案例已存在標準自動化動作
操作簡單到足以執行內建動作
您需要與外部 APIs互動 (改用 REST API 整合)
您需要存取檔案系統或資料庫 (使用適當的整合)
如何存取程式碼動作:
程式碼區塊可透過多個界面取得:
動作面板 (建議):
在自動化建置器中開啟您的自動化
按一下右側的動作面板
在程式碼動作區段下找到「自訂程式碼區塊」
將程式碼區塊拖放到您的自動化工作流程
使用助理建置:
當助理判斷需要自訂程式碼時,可在計劃產生期間使用
助理會自動建議複雜操作的程式碼區塊
您可以透過描述您的自訂邏輯需求來請求程式碼區塊
可用的動作:
單行表達式
單行表達式會執行執行操作的單行 Python 陳述式,而不會傳回值。它們非常適合快速修改現有變數,例如附加至清單、更新字典,或執行修改狀態的簡單計算。
屬性:
表達式 (必要):要執行的 Python 表達式 (例如 "my_list.append('new item')")
範例:
附加至清單
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
內建 Python 函數和匯入
所有標準 Python 內建函數都可以在沒有匯入的情況下使用 (len、str、int 等)
核准的標準程式庫 (受安全性限制)
程式碼區塊只能匯入下列標準程式庫:
base64- Base64 編碼/解碼datetime- 日期和時間操作json- JSON 剖析和產生math- 數學函數re- 規則表達式zoneinfo- 時區處理
注意
無法匯入上面列出的標準程式庫以外的標準程式庫。
無法安裝或匯入第三方程式庫。程式碼區塊
pip install不支援 。
限制
具有有限程式庫存取權的受限 Python 環境。執行環境是以 RestrictedPython 為基礎,這是 Python 3.10 的子集。
程式碼區塊無法叫用其他程式碼區塊或動作
最佳實務
保持程式碼區塊簡單且專注
使用描述性函數名稱
在可用時,一律偏好預先建置的動作
徹底測試程式碼區塊,因為重點偵錯選項有限)
範例 使用案例
數學運算 (計算圓形屬性 - 半徑作為參數
def function (radius): return { "radius": radius, "diameter": 2 * radius, "circumference": round(2 * math.pi * radius, 2), "area": round(math.pi * radius ** 2, 2) }取得目前日期/時間
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" }