我是程序员的新手,但我希望掌握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)
是否有更好的方法可以避免这种编码,比如在我调用单个和多个时的最后一个语句中。
提前谢谢。
答案 0 :(得分:2)
这是您经常遇到的事情,重复代码几乎总是不好的做法。无论如何,这样做的方法是使用两个if-statements
。这样,即使第一种情况通过,第二种情况仍然可以通过。哦,假设您的变量0
,1
或2
被称为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根据给定的参数定义要使用的函数。
在这种情况下,由于您要调用多个函数,因此我将所有字典项保存为列表,以便结构一致,并且可以迭代执行任意数量的操作。
确保使用省略字典中的()
,以便在定义字典时不会实例化这些函数。当你实际从字典中调用函数来实例化它时,请记得添加()
。