Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

PHPz
PHPzke hadapan
2023-04-11 21:22:163461semak imbas

Kata Pengantar

Artikel ini terus memperkenalkan modul koleksi Python Kali ini terutamanya memperkenalkan tupel yang dinamakan di dalamnya, iaitu penggunaan nametuple. Tanpa berlengah lagi, mari kita mulakan - ingat untuk suka, ikuti dan ke hadapan~ ^_^

Membuat tupel bernama

Kelas tuple bernamaTuples dalam koleksi Python ialah tupel Setiap kedudukan memberi bermakna dan meningkatkan kebolehbacaan dan keterhuraian kod. Ia boleh digunakan di mana-mana tupel biasa digunakan, dan menambah keupayaan untuk mengakses medan mengikut nama dan bukannya indeks kedudukan. Ia datang daripada koleksi modul terbina dalam Python. Sintaks umum yang digunakan ialah:

import collections
XxNamedTuple = collections.namedtuple(typename, field_names):

Jika kaedah import berbeza, seperti: import koleksi sebagai cAlias, daripada koleksi import namedtuple, daripada collections import namedtuple sebagai NamedTuple, dsb., tuple bernama yang kami buat akan Bentuk kelas boleh sepadan dengan:

XxNamedTuple = cAlias.namedtuple(……)
XxNamedTuple = namedtuple(……)
XxNamedTuple = NamedTuple(……)

di mana:

Nama taip parameter: Tentukan nama kelas rentetan untuk subkelas tuple baharu yang dikembalikan XxNamedTuple. Subkelas baharu untuk mencipta objek seperti tuple dengan medan berkaitan yang boleh diakses melalui carian harta, pengindeksan kedudukan dan lelaran. Contoh subkelas juga mempunyai docstring yang berguna (bersamaan dengan dokumen bantuan, dengan nama taip dan field_names) dan kaedah __repr__() berguna yang menyenaraikan kandungan tuple dalam format name=value.

Nama medan parameter: biasanya merupakan urutan rentetan, seperti ['x', 'y']. Secara pilihan, field_names boleh menjadi rentetan yang mengandungi nama medan sepadan yang dipisahkan oleh ruang dan/atau koma, seperti ' x y ' atau ' x, y '.

Mana-mana pengecam Python yang sah boleh digunakan sebagai nama medan bernama, tetapi ia tidak boleh bermula dengan garis bawah (_). Pengecam yang sah termasuk huruf, nombor dan garis bawah, tetapi jangan bermula dengan nombor atau garis bawah dan kata kunci seperti kelas, pulangan, global, lulus atau naikkan tidak boleh digunakan.

Untuk memahami cara NamedTuple berfungsi, mari kita anggap kita mempunyai objek Pekerja yang mempunyai sifat id, nama dan umur. Sila lihat senarai contoh kod:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

Output menjalankan program adalah serupa dengan yang berikut:

Employee(, name='Solo Cui ', age='18')
按索引方式访问Employee的名子为 : Solo Cui
Employee(, name='Annie Kent', age='26')
按键(字段名)访问Employee的名子为 : Annie Kent

Selain itu, terdapat beberapa lagi parameter dalam fungsi yang mencipta nama tuple Ia jarang digunakan, jadi berikut adalah pengenalan ringkas:

Nama semula parameter: Jika nama semula adalah benar, nama medan yang tidak sah akan digantikan secara automatik dengan nama kedudukan. Contohnya, ['abc', 'def', 'ghi', 'abc'] ditukar kepada ['abc', '_1', 'ghi', '_3'], menghapuskan kata kunci def dan nama medan pendua abc .

Parameter lalai: boleh menjadi Tiada atau objek lelaran nilai lalai. Memandangkan medan dengan nilai lalai mesti muncul selepas mana-mana medan tanpa nilai lalai, nilai lalai digunakan pada parameter paling kanan, secara berurutan ke kiri. Sebagai contoh, jika nama medan ialah ['x', 'y', 'z'] dan nilai lalai ialah (1,2), maka x akan menjadi parameter yang diperlukan, y akan lalai kepada 1 dan z akan lalai kepada 2.

Modul parameter: Jika modul ditakrifkan, atribut __module__ bagi tuple yang dinamakan ditetapkan kepada nilai ini.

Instance tuple bernama tidak menggunakan kamus berasingan untuk setiap tika, jadi ia ringan dan tidak memerlukan lebih banyak memori daripada tupel biasa.

Kaedah khusus tuple bernama

Selain kaedah yang diwarisi daripada tupel, tupel bernama menyokong tiga kaedah tambahan dan dua sifat. Untuk mengelakkan konflik dengan nama medan, nama kaedah dan sifat bermula dengan garis bawah. Ia diperkenalkan seperti berikut:

1) _make(iterable):

kaedah kelas untuk menjana kejadian baharu daripada jujukan sedia ada atau objek boleh lelar. Contoh kod adalah seperti berikut:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

Hasil output adalah serupa dengan yang berikut:

Employee(, name='Batman', age='28')

2) _asdict ():

Mengembalikan nama medan pemetaan kamus baharu kepada nilai yang sepadan. Kod sampel adalah seperti berikut:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

Hasil output adalah serupa dengan yang berikut:

{'id': '333', 'name': 'Batman', 'age': '28'}

3) _replace (**kwargs ):

Mengembalikan tika baharu tuple yang dinamakan, menggantikan medan yang ditentukan dengan nilai baharu. Contoh kod adalah seperti berikut:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

Hasil output adalah seperti berikut:

Employee(, name='Batman', age='34')

4) _medan:

dalam aksara Menyenaraikan nama medan sebagai tupel rentetan. Digunakan untuk introspeksi dan mencipta jenis tuple bernama baharu daripada tupel bernama sedia ada. Kod sampel adalah seperti berikut:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

Hasil output ialah:

('id', 'name', 'age')

我们可以使用_fields属性从现有的命名元组中创建新的命名元组。示例如下:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

输出结果类似如下:

Pixel(x=5, y=8, red=128, green=255, blue=0)

结果的实体性赋值

这里所说的实体,类似Java中的数据实体对象——只有简单的属性字段。而命名元组在为csv或sqlite3模块操作而返回的元组结果分配给对应字段名而装配成简单实体时特别有用,自动进行字段的对应赋值。比如在当前Python程序位置有个employees.csv,其包含内容如下:

张三,26,工程师,开发部,中级
李四,32,项目经理,项目部,高级

通过示例,我们来完成Employee实体的命名元组的自动装配,代码示例如下:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

输出结果类似如下:

张三 工程师 26 开发部 中级
李四 项目经理 32 项目部 高级

再简单地来个数据库操作和装配实体的示例,代码清单如下:

Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama

我这里只是简单的创建了数据库并创建表,然后插入一条数据,再查询并完成命名元组的实体化装配和结果输出。

运行输出结果如下:

王武 经理

本文小结

本文主要介绍了Python自带集合模块中的命名元组(namedtuple)的使用,即可以当做一般的元组使用,由可基于字段名的方式访问元组值,并介绍了命名元组内部扩展的几个方法和和属性的应用示例。最后还介绍了基于命名元组的实体化封装应用。基于代码示例进行介绍,这样便于你动手实践,以便更好地掌握和理解。

Atas ialah kandungan terperinci Pengaturcaraan Python: Penjelasan terperinci tentang perkara utama menggunakan tupel bernama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam