1.基本元祖類型
元祖為不可變序列,你可以通過(guò)索引來(lái)訪問(wèn)該位置上的元素,你可以使用切片來(lái)獲取指定范圍內(nèi)的元素,你同樣可以拼接連個(gè)元祖成一個(gè)元祖但是不可修改元素
創(chuàng)建元祖可以使用tuple(...)函數(shù),也可以用字面量
a = (1,3,4,5,6)
# 也可堵幽,a = 1,2,3,4,5,6 效果一樣
在使用字面量表達(dá)式來(lái)創(chuàng)建元祖時(shí),如果創(chuàng)建單個(gè)元素的元祖弹澎,必須在元素后面加上一個(gè)逗號(hào)
b = (1,) # b = 1,
a[1] # 返回 3
a[1:3] # 返回 (3朴下,4)
a[1] = 2 # raise TypeError:object doesn't support item assignment
a * 2 # 返回(1,2,3,4,5,6,1,2,3,4,5,6)
a = a + (7,) # 返回(1,2,3,4,5,6,7)
2.Named tuple命名元祖
帶有命名字段的元祖工廠函數(shù)collections.namedtuple(),我們可以在任何常規(guī)元祖使用的地方使用命名元祖苦蒿, 并且命名元祖可以通過(guò)字段名來(lái)訪問(wèn)字段值殴胧,同時(shí)也可以通過(guò)索引位置來(lái)訪問(wèn)字段值。
舉個(gè)簡(jiǎn)單的例子:
>>> # Basic example
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(11, y=22) # instantiate with positional or keyword arguments
>>> p[0] + p[1] # indexable like the plain tuple (11, 22)
33
>>> x, y = p # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y # fields also accessible by name
33
>>> p # readable __repr__ with a name=value style
Point(x=11, y=22)
實(shí)際應(yīng)用中:
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
import csv
for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
print(emp.name, emp.title)
import sqlite3
conn = sqlite3.connect('/companydata')
cursor = conn.cursor()
cursor.execute('SELECT name, age, title, department, paygrade FROM employees')
for emp in map(EmployeeRecord._make, cursor.fetchall()):
print(emp.name, emp.title)
常用方法調(diào)用:
- 1.
classmethod somenamedtuple._make(iterable)
(類方法)
>>> t = [11, 22]
>>> Point._make(t)
Point(x=11, y=22)
- 2.
somenamedtuple._asdict()
(實(shí)例方法)
>>> p = Point(x=11, y=22)
>>> p._asdict()
OrderedDict([('x', 11), ('y', 22)])
- 3.
somenamedtuple._replace(**kwargs)
>>> p = Point(x=11, y=22)
>>> p._replace(x=33)
Point(x=33, y=22)
- 4.
somenamedtuple._fields
(類屬性)
>>> p._fields # view the field names
('x', 'y')
>>> Color = namedtuple('Color', 'red green blue')
>>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
>>> Pixel(11, 22, 128, 255, 0)
Pixel(x=11, y=22, red=128, green=255, blue=0)
要將字典轉(zhuǎn)化為指定的元祖佩迟,我們可以使用一個(gè)技巧:
>>> d = {'x': 11, 'y': 22}
>>> Point(**d)
Point(x=11, y=22)