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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现

發(fā)布時間:2025/6/15 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

可迭代對象

首選確保for循環(huán)的in后面是一個可迭代對象,這樣就能通過python內(nèi)置函數(shù)iter()得到一個迭代器對象(iterator)

我們分別把列表list_test和字符串str_test分別得到一個迭代器 我們嘗試傳入數(shù)字看看

這里拋出了異常,因為數(shù)字不是一個可迭代對象

那么問題來了, 為什么列表和字符串是可迭代對象? 因為這些對象滿足了特殊的接口:

迭代列表時候,我們看看了列表下__開頭的方法,其中的__iter__()就是迭代協(xié)議的接口。我們在使用iter(list_test)時候?qū)嶋H內(nèi)部調(diào)用了這個__iter__()函數(shù) 我們再看迭代字符串時候,我們發(fā)現(xiàn)沒有找到__iter__()?, 但是有__getIterm__()這個接口

我們再看看迭代的簽名, 要么傳入的參數(shù)(對象)本身有迭代器,要么是一個序列。 我們這里list__test本身就有迭代器,而str_test是有__getItem__這種序列的接口。

迭代器對象

for n in list_test: print(n)

所以我們就搞清楚了,for循環(huán)中先由iter(list_test)得到一個迭代器t,然后不停的調(diào)用next next next 直到捕獲到一個StopIteration?異常,跳出循環(huán)。這就是for循環(huán)的工作流程

案例實現(xiàn)

我們從天氣應(yīng)用抓取各個城市溫度:北京: 10~18 南京:18~23 上海: 14~22 .... 如果一次性抓取所有天氣再顯示,顯示一個城市氣溫時,會有很多延遲。并且浪費(fèi)存儲空間。我們希望以“用時訪問”的策略,能把所有城市氣溫封裝到一個對象里面,需要時候再顯示。提示, 可用for語句進(jìn)行迭代。代碼怎么實現(xiàn)?

解決思路

  • 實現(xiàn)一個迭代器對象Weatherlterator, next方法每次返回一個城市氣溫.(迭代完畢時候要拋出停止迭代異常)

  • 實現(xiàn)一個可迭代對象Weatherlterable, __iter__方法返回一個迭代器對象。

  • def getWeather(city): r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=' + city) data = r.json()['data']['forecast'][0] # print(data) return '%s: %s, %s'%(city, data['low'], data['high'])print(getWeather(u'南京'))print(getWeather(u'上海'))

    以上是獲取城市氣溫數(shù)據(jù)方法,下面我們實現(xiàn)迭代器對象和可迭代對象,在python標(biāo)準(zhǔn)庫中對他們的接口已經(jīng)有定義。

    在collections包下有

    • Iterable(可迭代對象抽象接口就是__iter__)

    • Iterator(迭代器抽象接口就是__next__)

    我們可以直接繼承這兩個抽象類

    import requestsfrom collections import Iterable, Iterator# 天氣迭代器,class WeatherIterator(Iterator): # 應(yīng)該有個參數(shù)描述此迭代器能夠返回哪些城市信息, 傳入一個城市名字符串列表cities def __init__(self, cities): self.cities = cities # 記錄迭代的位置,初始化為0 self.index = 0 def getWeather(self, city): r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=' + city) data = r.json()['data']['forecast'][0] # print(data) return '%s: %s, %s' % (city, data['low'], data['high']) # 迭代器對象需要實現(xiàn)next接口, 需要返回一個城市基本信息,全部迭代完成時候需要拋出異常 def __next__(self): # 如果全部迭代完成 if self.index == len(self.cities): raise StopIteration city = self.cities[self.index] self.index += 1 return self.getWeather(city)class WeatherIterable(Iterable): def __init__(self, cities): self.cities = cities def __iter__(self): return WeatherIterator(self.cities)# 使用時候,實例化# [u'南京', u'上海', u'北京', u'深圳']for city in WeatherIterable([u'南京', u'上海', u'北京', u'深圳']): print(city)

    這里我們就實現(xiàn)了一個可迭代對象和迭代器對象,并且用示例感受了某些需要惰性訪問場景使用他們的優(yōu)勢。

    查看倉庫可直接獲取源碼:

    ?https://github.com/AlexZ33/Python_basic/blob/main/%E5%8F%AF%E8%BF%AD%E4%BB%A3%E5%AF%B9%E8%B1%A1%26%E8%BF%AD%E4%BB%A3%E5%99%A8%E5%AF%B9%E8%B1%A1/getWeather.py

    ??愛心三連擊

    1.看到這里了就點個在看支持下吧,你的「點贊,在看是我們創(chuàng)作的動力。

    2.關(guān)注公眾號圖靈編程俱樂部

    回復(fù)「沙龍」參加線上線下技術(shù)沙龍;?回復(fù)「python」參加python訓(xùn)練營;?回復(fù)「java」參加2020版企業(yè)實戰(zhàn)Java精英線下課程;?回復(fù)「圖靈編程」了解圖靈IT青年俱樂部;

    3.也可添加微信【17612567626】,一起成長。

    總結(jié)

    以上是生活随笔為你收集整理的传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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