Namedtuple في بايثون
تدعم بايثون نوعًا من قاموس الحاويات يسمى "" اسمهtuple() 'موجود في الوحدة' مجموعات '. سنرى في هذه المقالة كيفية إنشاء NameTuple والعمليات على NamedTuple.
ما هو NamedTuple في بايثون؟
في بايثون NamedTuple موجود داخل ملف وحدة المجموعات . فهو يوفر طريقة لإنشاء بنيات بيانات بسيطة وخفيفة الوزن مشابهة لفئة ما ولكن دون تحمل تكاليف تعريف فئة كاملة. مثل القواميس، تحتوي على مفاتيح مجزأة إلى قيمة معينة. على العكس من ذلك، فهو يدعم كلاً من الوصول من قيمة المفتاح وتكرار الوظيفة القواميس نقص.
بايثون NamedTuple بناء الجملة
اسمهtuple(اسم الحقل field_names)
- typename - اسم المجموعة المسماة.
- field_names - قائمة السمات المخزنة في المجموعة المسماة.
مثال: يظهر تنفيذ التعليمات البرمجية لـ NamedTuple في بايثون .
Python # Python code to demonstrate namedtuple() from collections import namedtuple # Declaring namedtuple() Student = namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using index print ( 'The Student age using index is : ' end = '' ) print ( S [ 1 ]) # Access using name print ( 'The Student name using keyname is : ' end = '' ) print ( S . name )
الإخراج
The Student age using index is : 19 The Student name using keyname is : Nandini
العمليات على NamedTuple
فيما يلي العمليات التالية التي يمكن إجراؤها باستخدام nametuple():
- إنشاء NameTuple
- عمليات الوصول
- عمليات التحويل
- عمليات إضافية
إنشاء NameTuple في بايثون
يؤدي هذا إلى إنشاء فئة مسماة جديدة باستخدام الدالة المسماة () من مجموعات وحدة. الوسيطة الأولى هي اسم الفئة الجديدة والوسيطة الثانية هي قائمة بأسماء الحقول.
Python from collections import namedtuple Point = namedtuple ( 'Point' [ 'x' 'y' ]) p = Point ( x = 1 y = 2 ) print ( p . x p . y )
الإخراج
1 2
عمليات الوصول
توفر Namedtuples في Python طرقًا ملائمة للوصول إلى حقولها. فيما يلي بعض عمليات الوصول المتوفرة في Python لـ NamedTuple:
- الوصول عن طريق الفهرس
- الوصول عن طريق الاسم الرئيسي
- الوصول باستخدام getattr()
الوصول عن طريق الفهرس
يتم ترتيب قيم سمات nametuple() ويمكن الوصول إليها باستخدام رقم الفهرس على عكس القواميس التي لا يمكن الوصول إليها عن طريق الفهرس. في هذا المثال نقوم بالوصول إلى بيانات الطالب باستخدام الفهرس.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using index print ( 'The Student age using index is : ' end = '' ) print ( S [ 1 ])
الإخراج
The Student age using index is : 19
الوصول عن طريق الاسم الرئيسي
يُسمح أيضًا بالوصول عن طريق الاسم الرئيسي كما هو الحال في القواميس. في هذا المثال نستخدم keyname للوصول إلى اسم الطالب.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using name print ( 'The Student name using keyname is : ' end = '' ) print ( S . name )
الإخراج
The Student name using keyname is : Nandini
الوصول باستخدام getattr()
هذه طريقة أخرى للوصول إلى القيمة من خلال إعطاء القيمة المسماة وقيمة المفتاح كوسيطة لها. في هذا المثال نستخدم getattr() للوصول إلى معرف الطالب في المجموعة المسماة المحددة.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Access using getattr() print ( 'The Student DOB using getattr() is : ' end = '' ) print ( getattr ( S 'DOB' ))
الإخراج
The Student DOB using getattr() is : 2541997
عمليات التحويل
توفر Namedtuples بعض عمليات التحويل المفيدة للعمل مع أنواع البيانات الأخرى بايثون . فيما يلي عمليات التحويل التالية التي يتم توفيرها للمجموعات المسماة في Python:
- باستخدام _make()
- باستخدام _asdict()
- باستخدام ** (نجمة مزدوجة) عامل التشغيل
التحويل باستخدام _make()
تُستخدم هذه الدالة لإرجاع أ nametuple() من التكرار مرت كحجة. في هذا المثال، نستخدم _make() لتحويل القائمة 'li' إلى مجموعة مسماة.
Python # importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using _make() to return namedtuple() print ( 'The namedtuple instance using iterable is : ' ) print ( Student . _make ( li ))
الإخراج
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
عملية التحويل باستخدام _asdict()
ترجع هذه الوظيفة ال أمرديرديكت () كما تم إنشاؤها من القيم المعينة لـ nametuple(). في هذا المثال، نستخدم _asdict() لتحويل قائمة الإدخال إلى مثيل مسمى.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] # initializing dict di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using _asdict() to return an OrderedDict() print ( 'The OrderedDict instance using namedtuple is : ' ) print ( S . _asdict ())
الإخراج
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) استخدام عامل التشغيل "**" (نجمة مزدوجة).
تُستخدم هذه الوظيفة لتحويل القاموس إلى المسمى () . في هذا المثال نستخدم '**' لتحويل قائمة الإدخال إلى مجموعة مسماة.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # initializing iterable li = [ 'Manjeet' '19' '411997' ] # initializing dict di = { 'name' : 'Nikhil' 'age' : 19 'DOB' : '1391997' } # using ** operator to return namedtuple from dictionary print ( 'The namedtuple instance from dict is : ' ) print ( Student ( ** di ))
الإخراج
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
عمليات إضافية
هناك بعض العمليات الإضافية التي يتم توفيرها في بايثون بالنسبة إلى NamedTuples:
- _fields
- _يستبدل()
- __جديد__()
- __getnewargs__()
_fields
يتم استخدام سمة البيانات هذه للحصول على جميع الأسماء الرئيسية من مساحة الاسم المعلنة. في هذا المثال، نستخدم _fields للحصول على جميع الأسماء الرئيسية لمساحة الاسم المعلنة.
Python import collections Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # using _fields to display all the keynames of namedtuple() print ( 'All the fields of students are : ' ) print ( S . _fields )
الإخراج
All the fields of students are : ('name' 'age' 'DOB') _يستبدل()
_replace() يشبه str.replace() ولكن الأهداف المسماة الحقول (لا تعدل القيم الأصلية). في هذا المثال نستخدم _replace() لاستبدال اسم من 'Nandini' إلى 'Manjeet'.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # ._replace returns a new namedtuple # it does not modify the original print ( 'returns a new namedtuple : ' ) print ( S . _replace ( name = 'Manjeet' ))
الإخراج
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__جديد__()
تقوم هذه الوظيفة بإرجاع مثيل جديد لفئة الطالب عن طريق أخذ القيم التي نريد تعيينها للمفاتيح الموجودة في المجموعة المسماة. في هذا المثال نستخدم __new__() لإرجاع مثيل جديد لفئة الطالب.
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) # Student.__new__ returns a new instance of Student(nameageDOB) print ( Student . __new__ ( Student 'Himesh' '19' '26082003' ))
الإخراج
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
تقوم هذه الدالة بإرجاع الصف المسمى كصف عادي. في هذا المثال نحن نفعل الشيء نفسه باستخدام __getnewargs__().
Python import collections # Declaring namedtuple() Student = collections . namedtuple ( 'Student' [ 'name' 'age' 'DOB' ]) # Adding values S = Student ( 'Nandini' '19' '2541997' ) H = Student ( 'Himesh' '19' '26082003' ) # .__getnewargs__ returns the named tuple as a plain tuple print ( H . __getnewargs__ ())
الإخراج
('Himesh' '19' '26082003')
- التحولية : يمكن أن تكون مثيلات الفصل قابلة للتغيير أو غير قابلة للتغيير بينما
namedtupleالحالات غير قابلة للتغيير.- طُرق : يمكن أن تحتوي الفئات على طرق (وظائف) بينما
namedtupleيوفر في المقام الأول طريقة لتخزين البيانات مع الحقول المسماة.- الميراث : تدعم الفئات الميراث مما يسمح بإنشاء تسلسلات هرمية معقدة
namedtupleلا يدعم الميراث.
ما هو الفرق بين الإملاء المكتوب وnametuple؟
- فحص النوع :
TypedDict(منtypingالوحدة النمطية) توفر تلميحات الكتابة للقواميس التي تحتوي على أزواج قيمة مفتاح محددة مفيدة للتحقق من النوع.namedtupleلا يوفر تلميحات النوع.- التحولية :
TypedDictالمثيلات قابلة للتغيير مما يسمح بإجراء تغييرات على القيم أثناءnamedtupleالحالات غير قابلة للتغيير.- بناء :
TypedDictيستخدم لتحديد بنية القواميس بأنواع محددة لكل مفتاح بينماnamedtupleيوفر حقولًا مسماة للبيانات المشابهة للصفوف.