对于函数参数,有没有比布尔值更好的方法?

时间:2014-10-16 00:24:45

标签: python

我的功能是:

def names(N=None, p=None, gender=None, start=None, End=None, Interval=None):

这个函数确实采用了什么参数并显然提供了输出。但是,如果NNone,但我会给出p,而所有其他参数都是Non,或者NP是否已给出以及所有其他参数没有给出参数,并且这样的映射继续,即如果给出一个参数而没有给出其他参数,则输出应该变化。目前我正在使用if语句和布尔值来检查它。但由于有太多的争论,它是一个非常长的概率。因此有更简单的方法吗?

目前我正在尝试:

#assuming N argument is not given but p argument is given
if ((bool(N)==False) and (bool(p)==True))==True:
#then the operation is carried out. 

2 个答案:

答案 0 :(得分:0)

我建议让names方法接受带有Npgender等属性的对象,或者带有这些键的字典。然后,您可以测试是否设置了对象的属性或字典的键。

对象getattr()方法或字典.get()方法甚至可以让您设置默认值,或者您可以在对象的__init__()方法中设置默认值。

答案 1 :(得分:0)

您可以考虑将函数拆分为几个接受较少数量参数的函数(目标是"高内聚和松散耦合"作为分割参数的指南)。

如果您将所有参数转换为bool,那么您可以利用True == 1False == 0例如:

result = [['false N, false p', 'false N, true p'], 
          ['true N, false p', 'true N, true p']][N][p]

您可以使用矩阵选择要调用的函数,而不是选择字符串。