如何在元組中的每個元素命名,提高程式可讀性

2021-08-04 04:45:01 字數 1816 閱讀 6555

實際案例

如:學生數量很大為了減小儲存開銷,對每個學生資訊用元組表示:

(『jim』, 16, 『male』, 『[email protected]』)

(『li』, 17, 『male』, 『[email protected]』)

(『lucy』, 16, 『female』, 『[email protected]』)

… 通常我們採用索引的方式訪問元組,具體操作如下:

# -*- coding: utf-8 -*-

student = ('jim', 16, 'male', '[email protected]')

# 列印學生姓名

print student[0]

# 學生年齡

if student[1] >= 18:

pass

# 學生性別

if student[2] == 'male':

pass

這種方式雖然簡單且能獲取我們想要的資料,但你有沒有注意到在**中我們使用3個索引,若我們不看注釋,就要看元組每乙個元素所代表的資訊了,這樣我們**的可讀性就很低了。那有什麼辦法來解決這個問題呢?這時我們不妨回想一下我們大多數人在大學中學習的第一門程式語言—— c語言,我們通常在c語言中進行如下操作:

# 第一種方式——巨集定義

#define name 0

#define age 1

#define *** 2

#define email 3

# 第二種方式——列舉型別

enum student

因此,我們可以使用類似c語言中的列舉型別的方式訪問元組,具體操作如下:

# -*- coding: utf-8 -*-

name = 0

age = 1

*** = 2

email = 3

student = ('jim', 16, 'male', '[email protected]')

# 列印學生姓名

print student[name]

# 學生年齡

if student[age] >= 18:

pass

# 學生性別

if student[***] == 'male':

pass

這樣一看,我們就知道各處索引是獲取元組內什麼資訊了,**的可讀性是不是變高了呢?讓我們繼續再看看我們剛剛的**,有沒有發現給name、age、sxe和email這幾個變數賦值有點繁瑣了呢?因此,我們可將其賦值**進行如下轉換:

name, age, ***, email = xrange(4)

那我們再思考一下,還有沒有方法既然提高程式的可讀性又能獲取我們的元組呢?當然是有的,我們可以使用python標準庫中collections.namedtuple替代內建的tuple,其中namedtuple函式的具體用法可檢視python官方文件,這裡我們將利用namedtuple函式進行如下操作:

# -*- coding: utf-8 -*-

from collections import namedtuple

student = namedtuple('student', ['name', 'age', '***', 'email'])

s = student('jim', 16, 'male', '[email protected]')

print s.name, s.age, s.***, s.email

其輸出結果如下:

jim 16 male [email protected]

如何為元組中的每個元素命名,提高程式可讀性

1 實際案例 學生資訊系統中資料為固定格式 名字,年齡,性別,郵箱位址,學生數量很大為了減小儲存開銷,對每個學生資訊用元組表示 jim 16,male jim8721 gmail.com li lei 17,male leile qq.com lucy 16,female lucy123 yahoo...

python資料結構 如何為元組中的每個元素命名

當物件資料格式固定時,用元組比列表更節省記憶體空間,我們使用索引訪問元組元素,但是這種訪問方式會降低程式的可讀性。舉個栗子 對於學生的資訊,我們有固定的資料格式,我們可以用元組表示,但是在我們使用它的時候並不知道stu1 1 stu 2 具體代表什麼資訊,這就大大降低了程式的可讀性 stu1 tom...

python中的命名元組namedtuple

namedtuple是繼承自tuple的子類。namedtuple建立乙個和tuple類似的物件,而且物件擁有可訪問的屬性 可利用collections.namedtuple構建乙個簡單的類。from collections import namedtuple 定義乙個namedtuple型別use...