[英]Better way to know if there are any elements left to iterate in for loop in Python
我有以下for循环:
def validate(request, fields=None):
i = 0
j = len(fields)
return_fields = []
for f in fields:
i += 1
if request.data[f] != check_validity(f)
if i == j:
return_fields.append(f)
return return_fields
else:
return_fields.append(f)
这通过某些函数check_validity()检查字段的有效性。 如果无效,则将其附加到return_fields列表中,最后将其返回给主调用方。 我的问题是,在我的代码中,我使用两个变量i和j只是检查列表“字段”中是否还有任何元素。 但是我只是想知道是否有更好的方法来执行相同的操作,因为我想返回所有无效字段,并且在遇到其中任何一个无效字段时都不要停止。
另一种方法是使用枚举 :
def validate(request, fields=None):
return_fields = []
for i, f in enumerate(fields):
if request.data[f] != check_validity(f)
if i+1 == len(fields):
return_fields.append(f)
return return_fields
else:
return_fields.append(f)
但是我不明白,为什么你需要知道它? 为什么你不能只是:
def validate(request, fields=None):
for f in fields:
if request.data[f] != check_validity(f)
return_fields.append(f)
return return_fields
简写:
def validate(request, fields=None):
return [
f for f in fields
if request.data[f] != check_validity(f)
]
for循环在整个数组中进行迭代时会自动完成,因此您只需将return
从for循环中取出,一旦对字段中的所有元素进行了迭代,它将立即运行。
def validate(request, fields=None):
return_fields = []
for f in fields:
if request.data[f] != check_validity(f)
return_fields.append(f)
return return_fields
def validate(request, fields=None):
return_fields = []
buggy = False
for f in fields:
if request.data[f] != check_validity(f)
buggy = True
return_fields.append(f)
if buggy: return return_fields
顺便说一句,在您的代码中,仅当最后一个字段无效时,它才会返回return_fields。
我想使用yield将对您有用:)(在这里看看“ yield”关键字在Python中有什么用? ,它相对复杂,但是就像在不重新启动函数的情况下一样)
def validate(request, fields=None):
for f in fields:
if request.data[f] != check_validity(f):
yield (f)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.