循环完成时执行代码块的正确方法

时间:2019-01-21 15:41:54

标签: python python-2.7

我经常遇到这样的情况,我想在满足条件以及循环结束时在循环内执行代码块。我通常通过索引/枚举或复制和粘贴来解决这个问题。我想知道是否有一种更内置的方式来处理此问题,类似于do while循环(我确实知道Python没有)。在下面的示例中,我想在条件失败时以及完成列表迭代后都调用一个函数。

y = []
for num in x:
    if condition:
        y.append(num)
    else:
        function_call(y)
        y = []
function_call(y)

2 个答案:

答案 0 :(得分:1)

首先,我会发现断言在开始时失败的情况,然后,如果条件有效,则进行处理:

y = []
for num in x:
    if not condition:
        function_call(y)
        y = []
        continue
    y.append(num)

function_call(y)

这样,后备是明确的。

然后,如果您想避免最后一个块,可以想像这样的解决方法,但是必须谨慎行事,因为它无助于保持代码的可读性:

y = []
for num in x + [None]:    # I assume `x` is a list?
    if not condition or num is None:   
        function_call(y)
        y = []
        continue
    y.append(num)

答案 1 :(得分:1)

您可以使用相同的方法来解决此问题,并且如果function_call所表示的代码很长,则可以使它具有如下功能:

之前:

y = []
for num in x:
    if condition:
        y.append(num)
    else:
        function_call_1(y)
        function_call_2(y)
        function_call_3(y)
        function_call_4(y)
        function_call_5(y)
        y = []
function_call_1(y)
function_call_2(y)
function_call_3(y)
function_call_4(y)
function_call_5(y)

之后:

def function_call(arg):
    function_call_1(arg)
    function_call_2(arg)
    function_call_3(arg)
    function_call_4(arg)
    function_call_5(arg)

y = []
for num in x:
    if condition:
        y.append(num)
    else:
        function_call(y)
        y = []
function_call(y)