我希望能够做到以下
之类的事情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)
*
“运算符”在此用法中对实例调用了什么?
答案 0 :(得分:3)
使用*
运算符时,有两种方法可以控制>>> 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
>>>
{{1}}
答案 1 :(得分:1)
人们调用此"positional expansion“或参数解包。您的实例应提供__iter__
方法,在迭代此对象时调用。但是,我认为最干净的方法是子类{{ 3}},这是Python中所有迭代的抽象基类。
请注意,collections.Iterable
与关键字参数解包相同,需要将对象作为映射。
编辑:在这种情况下,我仍然试图找到确切的实现,以查看用于解包的C API调用。这将得出这个问题的准确答案。有什么指针吗?
答案 2 :(得分:1)
您可以采用的一种方法是继承tuple
或list
。