Pythonic为嵌套if语句创建if语句的方法

时间:2018-01-09 16:53:36

标签: python-3.x

我是程序员的新手,但我希望掌握Python并且我正在开发开源应用程序。此应用程序具有收集一些信息的功能。此功能需要1个参数。此参数可以是0,1或2. 0 = False, 1 = True, 2 = Multi。我还有一个if语句执行2个操作。 1st - (当为False时)收集单一类型值,2nd - (当为True时)收集多个类型值,当参数为2(多)时,它将收集单一类型(第一个)和多个类型(第二个)。我的if语句如下所示:

if False:
    get_single_type = code.of.action
    generators.generate_data(False, get_single_type)
elif True:
    get_multiple_type = code.of.action
    generators.generate_data(True, get_multiple_type)
else:
    get_single_type = code.of.action
    generators.generate_data(False, get_single_type)
    get_multiple_type = code.of.action
    generators.generate_data(True, get_multiple_type)

是否有更好的方法可以避免这种编码,比如在我调用单个和多个时的最后一个语句中。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

这是您经常遇到的事情,重复代码几乎总是不好的做法。无论如何,这样做的方法是使用两个if-statements。这样,即使第一种情况通过,第二种情况仍然可以通过。哦,假设您的变量012被称为x,那么我们可以使用or和两个检查:

if x == 0 or x == 2:

但是,就个人而言,我更喜欢在元组上使用in

if x in (0, 2):
    get_single_type = code.of.action
    generators.generate_data(False, get_single_type)
if x in (1, 2):
    get_multiple_type = code.of.action
    generators.generate_data(True, get_multiple_type)

答案 1 :(得分:1)

我从Python学到的一件事是虽然它缺少Switch运算符,但你可以以类似的方式使用字典来完成任务,因为一切都是对象:

def get_single():
    # define your single function
    get_single_type = code.of.action
    generators.generate_data(False, get_single_type)


def get_multi():
    # define your multi function
    get_multiple_type = code.of.action
    generators.generate_data(True, get_multiple_type)

actions = {
    0: [get_single],
    1: [get_multi],
    2: [get_single, get_multi]
}

parameter = 0 # replace this line with however you are capturing the parameter
for action in actions[parameter]:
    action()

通过这种方式,您可以避免在任何地方使用c + p代码并从函数中引用它,以及您的"操作" dictionary根据给定的参数定义要使用的函数。

在这种情况下,由于您要调用多个函数,因此我将所有字典项保存为列表,以便结构一致,并且可以迭代执行任意数量的操作。

确保使用省略字典中的(),以便在定义字典时不会实例化这些函数。当你实际从字典中调用函数来实例化它时,请记得添加()