如何解决有没有更短的方法可以在每行代码之前检查条件而不重复条件?
我正在尝试使用pyautogui进行故障保护。有时必须将鼠标光标移到角落是非常困难的。以下是此键绑定处于活动状态时我的代码应该执行的示例。它可以工作,但是我想看看是否有更好的方式编写此代码,而不必每次都重复每个条件。我希望能够在循环期间的任何时间执行故障保护,而不必等到每次迭代的开始。
这是我希望我的代码执行的操作:
import pyautogui
import sys
from win32.lib.win32con import VK_CAPITAL
from win32.win32api import GetKeyState
def check():
if GetKeyState(VK_CAPITAL) == 1:
sys.exit()
for i in range(10):
check()
pyautogui.move(100,200,duration=1)
check()
pyautogui.move(200,300,duration=1)
check()
这是现在的样子:
import pyautogui
import sys
from win32.lib.win32con import VK_CAPITAL
from win32.win32api import GetKeyState
def check():
if GetKeyState(VK_CAPITAL) == 1:
sys.exit()
for i in range(10):
check()
pyautogui.move(100,duration=1)
pyautogui.move(200,duration=1)
解决方法
建立可调用操作的列表,并在检查条件时迭代该列表。以下将调用功能列表,直到大写锁定键处于活动状态:
import sys
import time
from win32.lib.win32con import VK_CAPITAL
from win32.win32api import GetKeyState
def check():
if GetKeyState(VK_CAPITAL) == 1:
print('exiting...')
sys.exit()
def move(x,y,duration):
print(f'move to {x},{y}')
time.sleep(duration)
funcs = (lambda: move(100,200,duration=1),lambda: move(200,300,duration=1))
while True:
for func in funcs:
check()
func()
,
一种不同的方法,
def func1():
print('func1')
def func2():
print('func1')
def func3():
print('func1')
funcs_map['cond1'] = func1
funcs_map['cond2'] = func2
funcs_map['cond3'] = func3
def get_condition(i:int) -> str:
if(i == 1):
return 'cond1'
elif(i == 2):
return 'cond2'
else:
raise ValueError(f'Unknown i value: {i} to get a condition')
for i in range(x):
func_ptr = funcs_map[get_condition(i)]
func_ptr()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。