亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)將名稱(chēng)映射到序列元素中的方法

 更新時(shí)間:2018年03月22日 11:58:31   作者:壟上行  
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)將名稱(chēng)映射到序列元素中的方法,結(jié)合實(shí)例形式分析了Python使用collections.namedtuple()進(jìn)行元組命名相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python將名稱(chēng)映射到序列元素中的方法。分享給大家供大家參考,具體如下:

問(wèn)題:希望通過(guò)名稱(chēng)來(lái)訪問(wèn)元素,減少結(jié)構(gòu)中對(duì)位置的依賴(lài)性

解決方案:使用命名元組collections.namedtuple()。它是一個(gè)工廠方法,返回的是python中標(biāo)準(zhǔn)元組類(lèi)型的子類(lèi),提供給它一個(gè)類(lèi)型名稱(chēng)以及相應(yīng)的字段名稱(chēng),它就返回一個(gè)可實(shí)例化的類(lèi),為你以定義好的字段名稱(chēng)傳入值等。

命名元組的主要作用在于將代碼同它所控制的元素位置間進(jìn)行解耦

>>> from collections import namedtuple
>>> Sub=namedtuple('Subscriber',['addr','joined'])
>>> subscriber=Sub('lucy@example.com','2016-8-7')
>>> subscriber
Subscriber(addr='lucy@example.com', joined='2016-8-7')
>>> subscriber.addr
'lucy@example.com'
>>> subscriber.joined
'2016-8-7'

namedtuple的實(shí)例與普通的元組是可互換的,而且支持所有普通元組所支持的操作,例如索引和分解(unpacking).

>>> len(subscriber)
2
>>> addr,joined=subscriber
>>> addr
'lucy@example.com'
>>> joined
'2016-8-7'
>>>

使用普通元組的代碼:

def compute_cost(records):
  total = 0.0
  for rec in records:
    total += rec[1] * rec[2]
  return total

通過(guò)位置來(lái)引用元素使得代碼的表達(dá)力不夠,而且也依賴(lài)于記錄的具體結(jié)構(gòu)。

下面是使用命名元組的版本:

# example.py
from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price'])
def compute_cost(records):
  total = 0.0
  for rec in records:
    s = Stock(*rec)
    total += s.shares * s.price
  return total
# Some Data
records = [
  ('GOOG', 100, 490.1),
  ('ACME', 100, 123.45),
  ('IBM', 50, 91.15)
]
print(compute_cost(records))

運(yùn)行結(jié)果:

65912.5

補(bǔ)充:

如果要構(gòu)建涉及字典的大型數(shù)據(jù)結(jié)構(gòu),使用namedtuple會(huì)更加有效。但是注意,與字典不同的是,namedtuple是不可變的。例如:

>>> s=Stock('ACMS',100,123.45)
>>> s
Stock(name='ACMS', shares=100, price=123.45)
>>> s.shares=75
Traceback (most recent call last):
 File "<pyshell#2>", line 1, in <module>
  s.shares=75
AttributeError: can't set attribute
>>>

若要修改屬性,可使用namedtuple實(shí)例的_replace()方法來(lái)實(shí)現(xiàn)。該方法會(huì)創(chuàng)建一個(gè)全新的命名元組,并對(duì)相應(yīng)的值做替換;

>>> s=s._replace(shares=75)
>>> s
Stock(name='ACMS', shares=75, price=123.45)
>>>

_replace()方法一個(gè)微妙的用途是它可以作為一種簡(jiǎn)便的方法填充具有可選或缺失字段的命名元組。

步驟:

1、創(chuàng)建一個(gè)包含默認(rèn)值的“原型”元組;

2、使用_replace()方法創(chuàng)建一個(gè)新實(shí)例,把相應(yīng)的值替換掉;

from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price','date','time'])
#創(chuàng)建一個(gè)包含默認(rèn)值的“原型”元組
stock_prototype=Stock('',0,0.0,None,None)
#創(chuàng)建一個(gè)函數(shù)實(shí)現(xiàn)將字典轉(zhuǎn)化為Stock類(lèi)型
def dict_to_stock(s):
  return stock_prototype._replace(**s)
a={'name':'ACMS','shares':100,'price':123.45}
print(dict_to_stock(a))
b={'name':'ACMS','shares':100,'price':123.45,'date':'2016-08-08'}
print(dict_to_stock(b))
c={'name':'ACMS','price':123.45}
print(dict_to_stock(c))

運(yùn)行結(jié)果:

Stock(name='ACMS', shares=100, price=123.45, date=None, time=None)
Stock(name='ACMS', shares=100, price=123.45, date='2016-08-08', time=None)
Stock(name='ACMS', shares=0, price=123.45, date=None, time=None)

注意:如果我們的目標(biāo)是定義一個(gè)高效的數(shù)據(jù)結(jié)構(gòu),而且將來(lái)會(huì)修改各種實(shí)例屬性,那么不推薦namedtuple!

(代碼摘自《Python Cookbook》)

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • django中的auth模塊與admin后臺(tái)管理方法

    django中的auth模塊與admin后臺(tái)管理方法

    這篇文章主要介紹了django中的auth模塊與admin后臺(tái)管理方法,包括auth模塊的常用方法及如何擴(kuò)展auth_user表,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • python 三種方法實(shí)現(xiàn)對(duì)Excel表格的讀寫(xiě)

    python 三種方法實(shí)現(xiàn)對(duì)Excel表格的讀寫(xiě)

    這篇文章主要介紹了python 三種方法實(shí)現(xiàn)對(duì)Excel表格的讀寫(xiě),幫助大家更好的利用python處理表格,感興趣的朋友可以了解下
    2020-11-11
  • Django contrib auth authenticate函數(shù)源碼解析

    Django contrib auth authenticate函數(shù)源碼解析

    這篇文章主要介紹了Django contrib auth authenticate函數(shù)源碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python3中urllib庫(kù)添加請(qǐng)求頭的兩種方式

    Python3中urllib庫(kù)添加請(qǐng)求頭的兩種方式

    Python?3中的urllib模塊可以用來(lái)處理URL,包括下載和上傳文件、創(chuàng)建和讀取cookie、訪問(wèn)Web?API等,本文給大家介紹Python3中urllib庫(kù)添加請(qǐng)求頭的兩種方式,感興趣的朋友一起看看吧
    2023-10-10
  • python調(diào)用win32接口進(jìn)行截圖的示例

    python調(diào)用win32接口進(jìn)行截圖的示例

    這篇文章主要介紹了python調(diào)用win32接口進(jìn)行截圖的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Python如何在DataFrame增加數(shù)值

    Python如何在DataFrame增加數(shù)值

    這篇文章主要介紹了Python如何在DataFrame增加數(shù)值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python實(shí)現(xiàn)購(gòu)物車(chē)程序

    Python實(shí)現(xiàn)購(gòu)物車(chē)程序

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)購(gòu)物車(chē)程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python 進(jìn)程 進(jìn)程池 進(jìn)程間通信實(shí)現(xiàn)解析

    python 進(jìn)程 進(jìn)程池 進(jìn)程間通信實(shí)現(xiàn)解析

    這篇文章主要介紹了python 進(jìn)程 進(jìn)程池 進(jìn)程間通信實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python自定義解析簡(jiǎn)單xml格式文件的方法

    python自定義解析簡(jiǎn)單xml格式文件的方法

    這篇文章主要介紹了python自定義解析簡(jiǎn)單xml格式文件的方法,涉及Python解析XML文件的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Python接口自動(dòng)化判斷元素原理解析

    Python接口自動(dòng)化判斷元素原理解析

    這篇文章主要介紹了Python接口自動(dòng)化判斷元素原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論