猿问

在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 语句,同时还遍历并检查每个数组的特定函数?


慕森卡
浏览 431回答 2
2回答

胡说叔叔

您可以更改该函数以接受任意数量的数组*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, array1, array2, array3, array4, array5,           array6, array7, array8, array9, array10):    for index, array in enumerate(array1, array2, array3, array4, array5,                  array6, array7, array8, array9, array10):        if not array:            array.append(0)        if arm != index:            array.append(array[-1])

哔哔one

您可以为任何想要为空列表分配零元素的函数定义一个装饰器。这将允许您添加初始化,而无需更改函数内的任何内容。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@noEmptyListsdef update(arm, array1, array2, array3, array4, array5):    print(arm, array1, array2, array3, array4, array5)update(1,[],[],[],[],[])# 1 [0] [0] [0] [0] [0]
随时随地看视频慕课网APP

相关分类

Python
我要回答