影刀RPA零基础教程:深度理解影刀变量——类型、作用域与常见陷阱
影刀的变量是流程里传递数据的"容器"。
但很多新手用了很久的影刀,对变量的理解还停留在"拖一个赋值指令"的层面。
遇到变量在循环里被意外修改、跨子流程拿不到数据、全局变量莫名其妙被清空这些问题时,完全摸不着头脑。
这篇文章把变量这件事说透。

一、影刀变量的三种类型
类型1:普通变量(最常用)
在当前流程内有效,关闭应用或跳出流程后消失。
# 赋值
商品名 = "连衣裙"
价格 = 89.0
是否成功 = True
数据列表 = ["a", "b", "c"]
影刀支持的数据类型:字符串、数字(整数/浮点数)、布尔值(True/False)、列表、字典、表格对象。
类型2:全局变量
跨子流程、跨应用调用时可见。在一个子流程里设置,另一个子流程里可以直接读取。

关键区别:普通变量在子流程里是"副本"(传进去的是值,不影响外面),全局变量是"共享"(所有流程看到同一份数据)。
类型3:循环变量
只在循环体内有效的迭代变量,比如"遍历列表"时的 当前项。
店群矩阵自动化突破运营极限!
循环结束后,循环变量的值保留为最后一次迭代的值(如果在循环外引用)。
二、变量赋值的4种方式

# 方式1:直接赋值指令
商品名 = "连衣裙"
# 方式2:从元素获取(最常用)
获取元素文本("//h1[@class='title']") –> 商品名
# 方式3:从上一步指令的输出获取
读取Excel("D:\\数据.xlsx") –> 表格对象
获取表格行数(表格对象) –> 总行数
# 方式4:Python代码里赋值
# 在"Python代码"指令里,用 result 变量返回给影刀
result = str(round(价格 * 0.8, 2)) # 计算8折价
三、作用域陷阱:子流程的变量是隔离的
这是新手最常掉进去的坑。
主流程里定义了 商品名 = "连衣裙",在子流程里 输出日志(商品名) 会报错"变量不存在"。
原因:子流程有自己独立的变量空间,主流程的变量不会自动传进去。
正确做法:通过参数传递

# 主流程
商品名 = "连衣裙"
调用子流程(采集商品详情, 参数=[商品名]) # 把变量作为参数传进去
# 子流程定义时,设置输入参数名
# 输入参数:product_name(接收主流程传来的商品名)
输出日志(product_name) # 在子流程里用参数名访问
如果子流程需要把结果传回主流程,设置"输出参数":
# 子流程
# 设置输出参数:result_data
result_data = 采集到的结果
# 主流程
调用子流程(采集商品详情, 参数=[商品名]) –> 返回值
# 返回值就是子流程的 result_data
四、全局变量的正确用法
全局变量适合存"整个流程生命周期里需要共享的状态"。
适合用全局变量的场景:

- 登录态标记(是否已登录)
- 运行计数器(已处理了多少条)
- 配置参数(Webhook 地址、目标 URL)
- 错误计数(今日失败了多少次)
不适合用全局变量的场景:
- 循环变量(循环里的当前项,用普通变量就好)
- 临时中间值(临时计算结果,函数内部自己用完就丢)
设置全局变量:
# 在影刀里,拖入"设置全局变量"指令
# 变量名:login_status
# 值:True
读取全局变量:
# 拖入"获取全局变量"指令
# 变量名:login_status
# 赋值给:当前登录状态

五、列表变量的操作
影刀里的列表和 Python 的 list 基本一致。
# 创建列表
采集结果 = []
# 追加元素
采集结果.append("商品A")
采集结果.append("商品B")
# 获取长度
总数 = len(采集结果)
# 遍历
遍历列表(采集结果, 当前项):
输出日志(当前项)
# 获取第N个元素(从0开始)
第一个 = 采集结果[0]
# 检查是否包含某元素
如果 "商品A" in 采集结果:
输出日志("存在")
六、字典变量的操作
字典用来存结构化数据,比列表多一个"键"来访问数据。
temu店群自动化报活动案例
# 创建字典
商品信息 = {
"name": "连衣裙",
"price": 89.0,
"sales": 1234
}
# 读取值
价格 = 商品信息["price"]
价格 = 商品信息.get("price", 0) # 带默认值,安全
# 修改值
商品信息["price"] = 99.0
# 遍历字典
遍历字典(商品信息, 键, 值):
输出日志(f"{键}: {值}")
# 检查键是否存在
如果 "discount" in 商品信息:
折扣 = 商品信息["discount"]
七、类型转换:数字和字符串之间
从网页采集到的数据几乎都是字符串,做计算前必须转换。
# 字符串 → 数字
价格字符串 = "89.00"
价格数字 = float(价格字符串)
# 字符串 → 整数
数量字符串 = "1234"
数量整数 = int(数量字符串)
# 数字 → 字符串(写入表格或拼接文字时用)
价格文本 = str(价格数字)
日期文本 = str(20260610)
# 带格式的数字 → 数字(去掉¥、逗号)
import re
原始文本 = "¥1,234.56"
干净数字 = float(re.sub(r'[^0-9.]', '', 原始文本))
八、常见变量陷阱速查
陷阱1:循环里累加变量忘了初始化

# 错误:total 没有初始化,第二次运行时会叠加上次的值
遍历行(数据表):
total += 当前行价格 # ❌ 如果 total 没有初始赋值,第一次会报错
# 正确:循环前先初始化
total = 0
遍历行(数据表):
total += 当前行价格 # ✅
陷阱2:列表变量被意外共享
# 陷阱:两个变量指向同一个列表
列表A = []
列表B = 列表A # 这不是复制,而是"引用"
列表B.append("x")
输出日志(列表A) # 输出 ['x'],因为两者指向同一个对象
# 正确:用 copy() 创建独立副本
列表B = 列表A.copy()
陷阱3:字符串拼接用 + 时忘了转换类型
# 报错
文件名 = "数据" + 当前日期 + ".xlsx" # 如果 当前日期 是 date 对象会报错
# 正确
文件名 = "数据" + str(当前日期) + ".xlsx"
# 或者用 f-string
文件名 = f"数据{当前日期}.xlsx"
陷阱4:变量名拼写错误(最难查)
# 声明时
商品名称 = "连衣裙"
# 使用时

输出日志(商品名) # 报错,因为名字不对(少了"称")
#影刀RPA #RPA变量 #影刀零基础教程 #自动化编程 #影刀新手入门
作者:林焱
本文为影刀RPA系列文章之一,内容源于实操经验整理与分享。 




