के लिए आप os.stat() और दूसरों के परिणाम वस्तु के रूप में एक ही कार्यान्वयन का उपयोग नहीं कर सकते। हालांकि पायथन 2.6 में एक नया फैक्ट्री फ़ंक्शन है जो नामित टुपल नामक एक समान डेटाटाइप बनाता है। एक नामित टुपल एक टुपल है जिसका स्लॉट भी नाम से संबोधित किया जा सकता है। नामित ट्यूपल को नियमित टुपल की तुलना में, दस्तावेज़ीकरण के अनुसार, किसी और स्मृति की आवश्यकता नहीं होती है, क्योंकि उनके पास प्रति इंस्टेंस डिक्शनरी नहीं है। कारखाने समारोह हस्ताक्षर है:
collections.namedtuple(typename, field_names[, verbose])
पहला तर्क नए प्रकार का नाम निर्दिष्ट, दूसरा तर्क एक स्ट्रिंग (अंतरिक्ष या अल्पविराम से अलग) फ़ील्ड नामों से युक्त, अगर वर्बोज़ सच है, है, और अंत में फैक्ट्री फ़ंक्शन भी उत्पन्न कक्षा को प्रिंट करेगा।
उदाहरण
मान लीजिए आप एक टपल एक उपयोगकर्ता नाम और पासवर्ड से युक्त है।स्थिति शून्य पर उपयोगकर्ता नाम आप आइटम मिल तक पहुँचने के लिए और पासवर्ड स्थिति एक पर पहुंचा जा सकता है:
credential = ('joeuser', 'secret123')
print 'Username:', credential[0]
print 'Password:', credential[1]
इस कोड के साथ गलत कुछ भी नहीं है लेकिन टपल स्वयं कुछ दस्तावेज़ीकृत नहीं है। आपको ट्यूपल में फ़ील्ड की स्थिति के बारे में दस्तावेज़ों को ढूंढना और पढ़ना होगा। यह वह जगह है जहां नामित टुपल बचाव के लिए आ सकता है। इस प्रकार हम पिछले उदाहरण पुनःकूटित कर सकते हैं:
import collections
# Create a new sub-tuple named Credential
Credential = collections.namedtuple('Credential', 'username, password')
credential = Credential(username='joeuser', password='secret123')
print 'Username:', credential.username
print 'Password:', credential.password
आप कोड की तरह जब प्रकार बनाने आप तर्क सूची में वर्बोज़ = सच में जोड़ सकते हैं नव निर्मित क्रेडेंशियल-प्रकार के लिए, इस में लग रहा है क्या की रुचि रखते हैं विशेष मामले हम निम्न आउटपुट प्राप्त:
import collections
Credential = collections.namedtuple('Credential', 'username, password', verbose=True)
class Credential(tuple):
'Credential(username, password)'
__slots__ =()
_fields = ('username', 'password')
def __new__(_cls, username, password):
return _tuple.__new__(_cls, (username, password))
@classmethod
def _make(cls, iterable, new=tuple.__new__, len=len):
'Make a new Credential object from a sequence or iterable'
result = new(cls, iterable)
if len(result) != 2:
raise TypeError('Expected 2 arguments, got %d' % len(result))
return result
def __repr__(self):
return 'Credential(username=%r, password=%r)' % self
def _asdict(t):
'Return a new dict which maps field names to their values'
return {'username': t[0], 'password': t[1]}
def _replace(_self, **kwds):
'Return a new Credential object replacing specified fields with new values'
result = _self._make(map(kwds.pop, ('username', 'password'), _self))
if kwds:
raise ValueError('Got unexpected field names: %r' % kwds.keys())
return result
def __getnewargs__(self):
return tuple(self)
username = _property(_itemgetter(0))
password = _property(_itemgetter(1))
नामित टपल केवल नाम से क्षेत्रों के लिए पहुँच प्रदान नहीं करता, लेकिन यह भी इस तरह के _make() फ़ंक्शन जो एक दृश्य से या किसी क्रेडेंशियल उदाहरण बनाकर मदद करता है के रूप में सहायक कार्यों में शामिल है iterable। उदाहरण के लिए:
cred_tuple = ('joeuser', 'secret123')
credential = Credential._make(cred_tuple)
namedtuple के लिए अजगर पुस्तकालय प्रलेखन अधिक जानकारी और कोड उदाहरण है, इसलिए मेरा सुझाव है कि आप take a peek.