我有以下课程
class MetricLst(object):
def __init__(self,n):
self.min = min(n)
self.max = max(n)
lst = [1,2,3,4,5]
p = MetricLst(lst)
print p.max
5
print p.min
1
带参数
class MetricArg(object):
def __init__(self,*args):
self.min = min(args)
self.max = max(args)
p = MetricArg(1,2,3,4,5)
p.max
print 5
p.min
print 1
我有以下问题:
答案 0 :(得分:3)
*args*
语法具有等效的镜像调用:
p = MetricArg(*somelist)
somelist
的元素将用作MetricArg
的参数。
这取决于您要呈现的API类型。如果你想接受0个或更多的参数,因为你最希望你方便地调用你的类,那么你就可以使用那个形式了。
在Python API中,print()
和os.path.join()
函数是众所周知的使用任意长度参数列表的callables示例。
答案 1 :(得分:1)
您可以将列表传递给可变参数函数或构造函数
L = [1, 2, 3, 4, 5]
p = MetricArg(*L)
是否使用可变参数函数而不是接受列表的函数实际上取决于函数。
是否经常使用动态构造的列表调用函数/构造函数,还是主要接收固定数量的参数?
如果列表主要是动态的,那么接受列表是最好的主意,因为你不会用*L
混乱代码。另一方面,如果在大多数情况下,参数的数量在调用者中是固定的,那么只需传递参数比构建列表只是为了传递它更具可读性。