[英]What is the best way to pass multiple parameters to class init in python?
我在python中创建一个可以接受多个参数的模块。 将参数传递给方法定义的最佳方法是什么?
def abc(arg): ... abc({"host" : "10.1.0.100", "protocol" : "http"})
def abc(host, protocol): ... abc("10.1.0.100", "http")
def abc(**kwargs): ... abc(host = "10.1.0.100", protocol = "http")
或者是其他东西?
我实际上会有这些参数(用户名,密码,协议,主机,密码2),其中不需要它们。
def abc(host, protocol):
...
abc("10.1.0.100", "http")
abc(host="10.1.0.100", protocol="http")
如果你使用位置args或关键字args调用它取决于参数的数量,如果你跳过任何参数。 对于您的示例,我没有看到使用关键字args调用函数有多少用处。
现在其他解决方案不好的一些原因:
abc({"host" : "10.1.0.100", "protocol" : "http"})
这是一种常用于缺少真正的关键字args(通常是JavaScript)的语言中的关键字参数的解决方法。 在那些语言中它很不错,但在Python中它是错误的,因为你从中获得的一切都没有。 如果你想用dict调用带有args的函数,你总是可以做abc(**{...})
。
def abc(**kwargs):
人们期望函数接受许多 - 甚至是任意的 - 参数。 除此之外,他们没有看到可能/需要的参数,你必须编写代码来自己要求某些参数。
如果提前知道所有参数,则使用显式参数列表,可选择使用默认值,例如def abc(arg1="hello", arg2="world",...)
。 这将使代码最具可读性。
当你调用函数时,你可以使用abd("hello", "world")
或abc(arg1="hello", arg2="world")
。 如果有超过4或5个参数,我会使用更长的形式,这是一个品味问题。
这实际上取决于方法的上下文,设计和目的。
如果参数是定义和强制的,那么最好的选择是:
def abc(host, protocol):
...
abc('10.1.0.100', 'http')
如果参数已定义但是可选,则:
def abc(host=None, protocol=None): # I used None, but put a default value
...
你可以把它称为abc('10.1.0.100', 'http')
或他们的名字abc(protocol='http')
如果你一开始不知道它将接收的参数是什么(例如在字符串格式化中),那么最好的选择是使用**kwargs
参数:
def abc(**kwargs):
...
通过这种方式,您必须使用命名参数调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.