[英]How do you name parameters when using the argument unpacking operator, python
[英]How to overload * argument unpacking operator?
我有data data = [[t1, t2, ...], [v1, v2, ...]]
。 我想將它包裝在一個類中,這樣我就可以調用data.t
而不必使用data[0]
。
我試着用以下方法做到這一點:
class Variable:
def __init__(self, data):
self.t = data[0]
self.v = data[1]
def __getitem__(self, key):
if key == 0:
return self.t
elif key == 1:
return self.v
else:
raise ValueError("not valid key '{}'".format(key))
def __setitem__(self, key, value):
if key == 0:
self.t = value
elif key == 1:
self.v = value
else:
raise ValueError("not valid key '{}'".format(key))
__getitem__
和__setitem__
重載的原因是為了向后兼容,因此data[0]
仍然有效。 這適用於大多數事情,但是我遇到以下調用時出現問題:
func_that_takes_two_arguments(*data) # unpacking data
我得到的錯誤是
/Users/pingul/Workspace/lhcfill/oml.py in __getitem__(self, key)
52 return self.val
53 else:
---> 54 raise ValueError("not valid key '{}'".format(key))
55
56 def __setitem__(self, key, value):
ValueError: not valid key '2'
如何使用參數解包操作符使我的類正常工作?
*
運算符通過迭代對象來工作。 只需實現__getitem__()
就可以執行此迭代,但您的實現有問題。 相反,如果提出ValueError
,則應拋出IndexError
,它表示迭代結束。
另請參見https://docs.python.org/3/reference/datamodel.html#object。 明確說明的getitem
注意:
for
循環期望為非法索引引發IndexError
,以允許正確檢測序列的結尾。
https://docs.python.org/2/library/functions.html#iter聲明這稱為“序列協議”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.