日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python keyerror_python 日常笔记 - namedtuple

發布時間:2024/2/28 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python keyerror_python 日常笔记 - namedtuple 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:

有一批食物,比如:蛋糕,豆腐,牛奶,白菜等等。這些食物都有自己的屬性,比如: 生產日期,重量,個數,產地這四個。那么用什么方式記錄這批食物呢? 或者說,我們如何在程序里對他們進行描述呢?

第一印象: 字典

優點:直接,快速,可拓展

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}

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

milk['state'] = 'liquid'

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

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

image.png

改進, 類

優點: 調用方便, 只要用 . 就可以。
而且是一個對象,有對象的所有特點,可以統一在定義的地方增加方法,增加屬性。

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

缺點: 定義起來太麻煩, 而且拓展不好,

進一步改進: namedtuple

優點: 定義方便, 適合這類標記,具有一部分類的優點和字典的優點。可以拓展屬性,只要在定義時候拓展,后續就都會自動拓展。統一管理這一類物體的屬性

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)

輸出結果同上

不同的情況需要選擇不同的數據結構,python 提供很過高級的數據結構,namedtuple 就是一個

ref:

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。