दरअसल, जब आप bla[x,y]
निष्पादित, आप type(bla).__getitem__(bla, (x, y))
कॉल कर रहे हैं - अजगर स्वचालित रूप से रूपों आपके लिए tuple और इसे दूसरे तर्क के रूप में __getitem__
पर भेजता है (पहला वाला यह है self
)। [1] कोई अच्छा तरीका नहीं है कि __getitem__
व्यक्त करने के लिए और अधिक तर्क चाहते हैं, लेकिन इसकी कोई आवश्यकता नहीं है।
[1] अजगर 2.*
में आप वास्तव में __getitem__
एक स्वत: unpacking हस्ताक्षर जो ValueError
या TypeError
बढ़ा देंगे जब आप बहुत अधिक या बहुत कम सूचकांक के साथ का अनुक्रमण रहे हैं दे सकते हैं .. ।:
>>> class X(object):
... def __getitem__(self, (x, y)): return x, y
...
>>> x = X()
>>> x[23, 45]
(23, 45)
चाहे कि "एक अच्छा तरीका है" विवादास्पद है ... यह अजगर 3 में बहिष्कार किया गया है ताकि आप अनुमान लगा सकते हैं कि गुइडो नहीं था लंबे प्रतिबिंब पर अच्छा पर विचार न करें ;-)। अपने स्वयं के अनपॅकिंग (हस्ताक्षर में एक ही तर्क का) करना कोई बड़ा सौदा नहीं है और आपको 1 बनाम, उदाहरण के साथ इस तरह के एक उदाहरण को अनुक्रमणित करने की बहुत ही समान त्रुटि के लिए अलग-अलग प्रकारों के बजाय स्पष्ट त्रुटियों (और वर्दी वाले) प्रदान करने देता है, 3 सूचकांक ;-)।
स्रोत
2009-11-06 04:37:41
3.x में अनपॅकिंग तर्क के बहिष्कार के बारे में मेरी समझ इतनी अधिक नहीं थी कि "गुइडो ने इसे अच्छा नहीं माना", लेकिन शायद ही कभी किसी को यह पता था कि इस भाषा में भी सुविधा मौजूद है, और यह संकलक को काफी जटिल बनाता है । –
@ लॉरेंस, हाँ - जटिल और बहुत ही कम इस्तेमाल किया -> अच्छा नहीं! -) –
मैंने नियमित रूप से इसका इस्तेमाल किया और यह काफी अच्छा था, लेकिन मुद्दा यह था कि यह जटिल प्रतिबिंब था। मैं इसे मुख्य रूप से लैम्ब्डा फ़ंक्शंस – Casebash