我的脚本中有很多必要的time.sleep()
。我想清理代码并可能将等待/暂停附加到上一行而不是创建新行。例如:
call(['networksetup', '-setv4off', 'direct IP'])
time.sleep(5)
有没有办法实现这个目标? (Python 3.4)
提前致谢。
答案 0 :(得分:2)
如果您的意思是将这两行合并为一行,请尝试:


 call(['networksetup',' - setv4off','direct IP' ]); time.sleep(5)
 代码>


答案 1 :(得分:0)
如果您无条件地希望能够在特定功能(或一组功能)之后睡觉,那么我所知道的最简单的方法是使用装饰器。
from functools import wraps
import time
def sleep_decorator(f, duration = 5.0):
@wraps(f)
def wrapper(*args, **kwargs):
result = f(*args, **kwargs)
time.sleep( duration )
return result
return wrapper
@sleep_decorator
def call(*args, **kwargs):
return None
call(['networksetup', '-setv4off', 'direct IP'])
该解决方案的问题是睡眠的持续时间不能改变,并且您无法根据具体情况启用和禁用睡眠呼叫。
要增强解决方案,您可以为装饰器添加参数。
from functools import wraps
import time
def sleep_decorator(duration = 5.0, active = True):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
result = f(*args, **kwargs)
sleep_duration = kwargs.get('duration', duration)
sleep_active = kwargs.get('active', active)
if sleep_active:
time.sleep( sleep_duration )
return result
return wrapper
return decorator
这意味着您现在可以按如下方式编写代码:
@sleep_decorator(active = False, duration = 0.1)
def call(*args, **kwargs):
return None
call(['networksetup', '-setv4off', 'direct IP'])
call(['networksetup', '-setv4off', 'direct IP'], active = True)
call(['networksetup', '-setv4off', 'direct IP'], active = True, duration = 1.0)
另一个可以让你注入代码的替代方法是在运行时重写代码的Abstract Syntax Tree。这将允许您注入任意函数调用。像numba和pony这样的库使用这样的技巧将Python代码转换为特定于域的代码。