有很多参数的Python函数

2024-09-30 14:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

一般来说,我对Python和更高级别的语言还不熟悉,所以我想知道如果我有一个接受大量参数的函数,是否会被人看不起,以及如何更好地设计代码来防止这种情况。在

例如,这个函数的实质是打印文件中字符串的每个位置。在

def scan(fpin,base,string,pNo,print_to_file,dumpfile_path,quiet):

这个函数是从main函数调用的,它基本上是解析命令行参数并将数据传递给scan函数。我曾想过创建一个包含所有这些参数的类并将其传递给scan,但是这些数据只有一个实例,所以这不是没有意义吗?在


Tags: 数据函数字符串代码语言base参数string
2条回答

命名论点是你的朋友。对于具有合理默认值的半可选配置选项,为参数提供默认值,并且仅在非默认情况下传递它们(作为命名参数)。如果有很多参数没有合理的默认值,那么在调用函数时可能需要命名所有这些参数。在

考虑内置函数sorted。它需要四个参数。reverse参数是在cmp之前还是之后?如果我想要默认行为,我应该以key的形式传入什么?回答:如果我记得的话。我调用sorted(A, reverse=True),它做了我期望的事情。在

顺便说一句,如果我在每次扫描调用中都传递了大量的“config”样式的参数,并且每次都只更改(比如,fpin和{}),那么我可能倾向于将所有其他参数放入字典,然后用**kwargs语法将其传递给函数。这有点先进。详见说明书。(请注意,这与将函数声明为接受**kwargs不同。函数定义是相同的,唯一的区别是调用它的样子。)

不,真的没什么问题。如果你有N个不同的参数(控制函数执行的东西),你必须以某种方式传递它们——如果你问我,你实际怎么做只是用户的偏好。在

但是。。。但是,如果你发现自己在做这样的事情:

func('somestring', a=A, b=B, c=C)
func('something else', a=A, b=B)
func('something third', a=A, c=C, d=D)

如果A,B,C是很多不同事物的配置,那么你应该开始研究一个类。一个类可以做很多事情,但也可以创建上下文。相反,你可以做一些类似的事情:

^{pr2}$

等等

相关问题 更多 >