在Python中编写一系列if语句的有效方法?

问题描述

我想重写一段代码,以使其更有效。我正在使用Python工作,并且没有像Java那样的switch-break语句,但是我觉得类似的结构也可以工作。我正在谈论的代码片段是:

def update(arm,array1,array2,array3,array4,array5):
    # If the array is empty,add a zero
    if not array1:
        array1.append(0)
    if not array2:
        array2.append(0)
    if not array3:
        array3.append(0)
    if not array4:
        array4.append(0)
    if not array5:
        array5.append(0)

总的来说,有什么好方法可以避免在Python中编写一系列的if语句,同时还要检查并检查每个数组中的该特定函数

解决方法

您可以使用*args更改函数以接受任意数量的数组,然后使用for循环:

def update(arm,*arrays):
    for index,array in enumerate(arrays):
        if not array:
            array.append(0)
        if arm != index:
            array.append(array[-1])

不仅缩短了时间,而且还可以处理传递给update的任意数量的数组,因此update(arm,array1)update(arm,array1,array2)等中的任何一个都可以工作。

如果由于某种原因您无法更改函数的签名,则仍然可以使用循环,但是必须对循环进行迭代的数组进行硬编码。

def update(arm,array2,array3,array4,array5,array6,array7,array8,array9,array10):
    for index,array in enumerate(array1,array10):
        if not array:
            array.append(0)
        if arm != index:
            array.append(array[-1])
,

您可以为任何希望为空列表分配零元素的函数定义装饰器。这将允许您在不更改函数内部的任何内容的情况下添加初始化。

def noEmptyLists(func):
    def decorated(*args,**kwargs):
        for a in (*args,*kwargs.values()):
            if isinstance(a,list) and not a:
                a.append(0)
        return func(*args,**kwargs)
    return decorated

@noEmptyLists
def update(arm,array5):
    print(arm,array5)


update(1,[],[])

# 1 [0] [0] [0] [0] [0]