例程可以有参数,这不是新闻.您可以根据需要定义任意数量的参数,但是过多的参数会使您的日常工作难以理解和维护.
当然,您可以使用结构化变量作为解决方法:将所有这些变量放在单个结构中并将其传递给例程.实际上,使用结构简化参数列表是Steve McConnell在Code Complete中描述的技术之一.但正如他所说:
细心的程序员避免捆绑数据,这在逻辑上是必要的.
因此,如果您的例程有太多参数或使用结构来伪装一个大参数列表,那么您可能做错了.也就是说,你没有保持松耦合.
我的问题是,我什么时候可以考虑参数列表太大?我认为超过5个参数,太多了.你怎么看?
我正在开发一个跨越5个模块的python的中型程序.程序在主模块中使用OptionParser接受命令行参数,例如main.py. 这些选项稍后用于确定其他模块中的方法的行为(egapy,b.py).当我扩展用户自定义行为或程序的能力时,我发现我最终在a.py中的方法中要求这个用户定义的参数,而不是由main.py直接调用,而是由另一个调用a.py中的方法:
main.py:
import a
p = some_command_line_argument_value
a.meth1(p)
Run Code Online (Sandbox Code Playgroud)
a.py:
meth1(p):
# some code
res = meth2(p)
# some more code w/ res
meth2(p):
# do something with p
Run Code Online (Sandbox Code Playgroud)
这种过多的参数传递似乎是浪费和错误的,但是我努力尝试我无法想到解决这个问题的设计模式.虽然我有一些正式的CS教育(在我的学士学位期间辅修CS),但自从我开始使用python以来,我才真正体会到良好的编码实践.请帮助我成为更好的程序员!