【发布时间】:2015-01-19 01:24:29
【问题描述】:
我正在尝试找到一种优雅的方式来做到这一点。我基本上有一个返回记录的类。 我为此使用了一个基本的迭代器:
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 循环?
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)的元组(或任何默认延迟),并为两者使用相同的代码路径?
标签: python for-loop iteration conditional