Python中如何将函数加入列表队列、避免添加时立即执行?
问题根因
你的代码操作会直接触发运行是两个问题导致的:
- 把函数加入队列时加了
()后缀:Python中只要写函数名()就会立即执行函数,你传给append的实际是函数的返回值(默认是None),而非函数本身 - 选项1对应的
clique()函数内部嵌套了lista.append(clique()),逻辑错位,还会触发函数调用死循环,append操作的位置完全错误
修复后代码
import pyautogui import time # 提前初始化操作队列 lista = [] escolha = '' while (escolha!='5'): escolha = input('请输入操作选项:') if (escolha=='1'): print('即将开始倒计时,结束后请把鼠标放在要点击的位置') time.sleep(5) print('5') time.sleep(1) print('4') time.sleep(1) print('3') time.sleep(1) print('2') time.sleep(1) print('1') localclick=pyautogui.position() print(f'已记录点击位置:{localclick}') def clique(): pyautogui.click(localclick) # 仅传函数名,不加(),把函数本身存入队列 lista.append(clique) if (escolha=='2'): print("请输入快捷键,用+分隔,最多3个键,示例:alt+tab+ctrl") my_var = input("").split('+') # 补参数长度校验,避免索引报错 while len(my_var) <3: my_var.append('') def hotchave(): # 过滤空参数 keys = [k for k in my_var if k] pyautogui.hotkey(*keys) # 仅传函数名,不加() lista.append(hotchave) # 执行队列的示例选项 if escolha == '3': print('开始执行队列中所有操作') for func in lista: func() # 此处加()才会真正触发操作执行
使用说明
- 选择1、2添加的操作都会存储在
lista队列中,不会立即执行 - 需要执行时遍历队列,对每个元素加
()调用即可 - 如果不需要单独定义函数,也可以用lambda简化写法,比如
lista.append(lambda: pyautogui.click(localclick))
内容的提问来源于stack exchange,提问作者user16292520
相关产品推荐
相关产品推荐

