我试图找到一个这样做的优雅方式。我基本上有一个返回记录的类。 我使用一个基本迭代器这样的:在迭代器对象中迭代“1个或更多”元素?
i = 0
if mode == "sim":
for record in iterator_obj:
try:
s.sendall(record)
time.sleep(delay)
i += 1
然而此迭代类已被修改,使得如果使用命令行开关,它返回(记录,延迟)的元组。
这种延迟我在 time.sleep使用(延迟)
,这看起来像这样(如果迭代没有返回延迟这显然会失败):
for record, wait in iterator_obj:
if wait == 0:
pass
else:
delay = wait
if verbose:
print ('\n[+] Waiting {} seconds to send next record'.format(delay))
try:
s.sendall(record)
time.sleep(delay)
i += 1
其大量的浪费线,有没有办法为1个或更多的元素做一个有条件的循环?
for x, y (if y) in iterator_object
解决方案
诀窍是使用isinstance检查元组。下面更新代码:
for record in iterator_obj:
wait = None
if isinstance(record,(list,tuple)):
record,wait = record
if wait == 0 or wait is None:
pass
else:
delay = wait
if verbose:
print ('\n[+] Waiting {} seconds to send next record'.format(delay))
如何更改第一个返回'(record,0)'(或任何默认延迟)的元组,并使用相同的代码路径? – 2014-11-21 00:33:16