日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python keyerror_python 日常笔记 - namedtuple

發(fā)布時(shí)間:2024/2/28 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python keyerror_python 日常笔记 - namedtuple 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題:

有一批食物,比如:蛋糕,豆腐,牛奶,白菜等等。這些食物都有自己的屬性,比如: 生產(chǎn)日期,重量,個(gè)數(shù),產(chǎn)地這四個(gè)。那么用什么方式記錄這批食物呢? 或者說,我們?nèi)绾卧诔绦蚶飳?duì)他們進(jìn)行描述呢?

第一印象: 字典

優(yōu)點(diǎn):直接,快速,可拓展

cake = {"weight": 12, "product_date": "2019-06-15", "product_place": "Beijing", "cnt" : 10}toufu = {"weight": 7, "product_date": "2019-07-17", "product_place": "Beijing", "cnt" : 1}milk = {"weight": 10, "product_date": "2019-12-05", "product_place": "Beijing", "cnt" : 12}cabbage = {"weight": 25, "product_date": "2019-09-25", "product_place": "Beijing", "cnt" : 1}

如果有個(gè)特別的屬性,我們直接增加就可以了

milk['state'] = 'liquid'

但是這個(gè)方式一些缺點(diǎn),
就是每次調(diào)用的時(shí)候都要使用括號(hào)引用,而且由于key過于靈活,導(dǎo)致可能有些時(shí)候會(huì)出現(xiàn)key error (雖然可以用get 方法彌補(bǔ))
這些東西我們本意是想歸為一類,但是這樣雖然可以描述信息,但是并沒有體現(xiàn)出來是一類東西, 比如我們定義一輛汽車。
比如:

print(toufu["weight"])print(toufu["state"]) # 這個(gè)就會(huì)報(bào)錯(cuò),key error, 因?yàn)闆]有這個(gè)keyprint(toufu.get("state", "no_such_info")) # 用get 方法,如果沒有,就返回我們?cè)O(shè)定的值,若沒有設(shè)定就是 Nonecar = {"weight": 20005, "product_date": "2019-09-25", "product_place": "Beijing", "cnt" : 1}# 上述汽車也可以這樣定義,但是并不是食物

image.png

改進(jìn), 類

優(yōu)點(diǎn): 調(diào)用方便, 只要用 . 就可以。
而且是一個(gè)對(duì)象,有對(duì)象的所有特點(diǎn),可以統(tǒng)一在定義的地方增加方法,增加屬性。

class Food: def __init__(self, weight, product_date, product_place, cnt): self.weight = weight self.product_date = product_date self.product_place = product_place self.cnt = cntcake = Food(12, "2019-06-05", "Beijing", 10)toufu = Food(7, "2019-07-17", "Beijing", 1)milk = Food(10, "2019-12-05", "Beijing", 12)cabbage = Food(25, "2019-09-25", "Beijing", 1)print(cake.weight)print(milk.product_date)

image.png

缺點(diǎn): 定義起來太麻煩, 而且拓展不好,

進(jìn)一步改進(jìn): namedtuple

優(yōu)點(diǎn): 定義方便, 適合這類標(biāo)記,具有一部分類的優(yōu)點(diǎn)和字典的優(yōu)點(diǎn)。可以拓展屬性,只要在定義時(shí)候拓展,后續(xù)就都會(huì)自動(dòng)拓展。統(tǒng)一管理這一類物體的屬性

import collectionsFood = collections.namedtuple('Food', 'weight product_date product_place cnt')cake = Food(weight=12, product_date="2019-06-05", product_place='Beijing', cnt =10)toufu = Food(weight=7, product_date="2019-07-17", product_place='Beijing', cnt =1)milk = Food(weight=10, product_date="2019-12-05", product_place='Beijing', cnt =12)cabbage = Food(weight=25, product_date="2019-09-25", product_place='Beijing', cnt =1)print(cake.weight)print(milk.product_date)

輸出結(jié)果同上

不同的情況需要選擇不同的數(shù)據(jù)結(jié)構(gòu),python 提供很過高級(jí)的數(shù)據(jù)結(jié)構(gòu),namedtuple 就是一個(gè)

ref:

https://docs.python.org/3.7/library/collections.html
https://www.geeksforgeeks.org/namedtuple-in-python/

總結(jié)

以上是生活随笔為你收集整理的python keyerror_python 日常笔记 - namedtuple的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。