特别是当参数太多(10 + 20+)时。
对函数强制执行required/optional
参数的好方法是什么?
有哪些好书可以解决python的这类问题? (比如c ++的有效c ++)
**编辑**
我认为当需要的参数太多时列出def foo(self, arg1, arg2, arg3, .. arg20, .....):
是非常不切实际的。
答案 0 :(得分:3)
参数可以是必需的或可选的,具体取决于它们在函数定义中的显示方式:
def myfunction(p1, p2, p3=False, p4=5)
在此定义中,需要参数p1
和p2
。 p3
是可选的,如果调用者未提供,则将获取值False
。 p4
也是可选的,如果未提供,则会获取值5
。
如果你真的需要将十个或更多参数传递给一个函数,最好将它们作为字典传递:
args = {'a': something, 'b': something_else, 'c': 5, 'd': 99.99, ... }
myfunc(args)
答案 1 :(得分:2)
如果不需要函数参数,则可以将其设置为None。
def hello(first_name, last_name=None):
print "Hello " + first_name
或者正如John Gordon所说,你可以用同样的方式设置一个默认值的参数。
请注意,需要在所需参数之后定义可选参数。
答案 2 :(得分:0)
一种方法是将所需参数命名为func(a, b, c=1)
,这表示必需,因为如果缺少任何参数,代码将在运行时出错。然后,对于可选参数,您将使用Python的args
和kwargs
。
当然,任何时候使用Python的args
和kwargs
都意味着需要额外的代码来从args
和kwargs
中提取参数。
此外,对于每个可选参数组合,您需要编写一组条件控制流。
此外,您不需要太多可选分配,因为它会使代码的API变得复杂以便描述......并且控制流需要多行代码,因为对于每个附加可选项,可能的组合数量会非常快速地增长参数。
你的测试代码越来越快......