2024-05-29 02:11:14 发布
网友
我想做如下的事情
class C(object): # I store a series of values in some way # what do I need to implement to act like an array of arguments c=C() result=f(*c)
在这种用法中,*“操作符”对实例调用什么?你知道吗
*
人们称之为"positional expansion“或参数解包。您的实例应该提供一个__iter__方法,在迭代这个对象时调用它。然而,我认为最干净的方法应该是子类^{},它是Python中所有iterable的抽象基类。你知道吗
__iter__
注意,this对于关键字参数解包来说是相同的问题,要求对象是映射。你知道吗
Edit:我仍在试图找到本例中的确切实现,以查看哪个C API调用用于解包。这将得出这个问题的确切答案。有什么建议吗?你知道吗
一种方法是将tuple或list子类化。你知道吗
tuple
list
有两种方法可以控制*操作符在这样使用时的行为:
重载^{} special method:
>>> class C(object): ... def __init__(self, lst): ... self.lst = lst ... def __iter__(self): ... return iter(self.lst) ... >>> def f(a, b, c): ... print "Arguments: ", a, b, c ... >>> c = C([1, 2, 3]) >>> f(*c) Arguments: 1 2 3 >>>
>>> class C(object): ... def __init__(self, lst): ... self.lst = lst ... def __getitem__(self, key): ... return self.lst[key] ... >>> def f(a, b, c): ... print "Arguments: ", a, b, c ... >>> c = C([1, 2, 3]) >>> f(*c) Arguments: 1 2 3 >>>
人们称之为"positional expansion“或参数解包。您的实例应该提供一个} ,它是Python中所有iterable的抽象基类。你知道吗
__iter__
方法,在迭代这个对象时调用它。然而,我认为最干净的方法应该是子类^{注意,this对于关键字参数解包来说是相同的问题,要求对象是映射。你知道吗
Edit:我仍在试图找到本例中的确切实现,以查看哪个C API调用用于解包。这将得出这个问题的确切答案。有什么建议吗?你知道吗
一种方法是将
tuple
或list
子类化。你知道吗有两种方法可以控制
*
操作符在这样使用时的行为:重载^{} special method :
重载^{} special method :
相关问题 更多 >
编程相关推荐