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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

可迭代對象

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

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

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

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

迭代列表時候,我們看看了列表下__開頭的方法,其中的__iter__()就是迭代協議的接口。我們在使用iter(list_test)時候實際內部調用了這個__iter__()函數 我們再看迭代字符串時候,我們發現沒有找到__iter__()?, 但是有__getIterm__()這個接口

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

迭代器對象

for n in list_test: print(n)

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

案例實現

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

解決思路

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

  • 實現一個可迭代對象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'上海'))

    以上是獲取城市氣溫數據方法,下面我們實現迭代器對象和可迭代對象,在python標準庫中對他們的接口已經有定義。

    在collections包下有

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

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

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

    import requestsfrom collections import Iterable, Iterator# 天氣迭代器,class WeatherIterator(Iterator): # 應該有個參數描述此迭代器能夠返回哪些城市信息, 傳入一個城市名字符串列表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']) # 迭代器對象需要實現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)

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

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

    ?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.看到這里了就點個在看支持下吧,你的「點贊,在看是我們創作的動力。

    2.關注公眾號圖靈編程俱樂部

    回復「沙龍」參加線上線下技術沙龍;?回復「python」參加python訓練營;?回復「java」參加2020版企業實戰Java精英線下課程;?回復「圖靈編程」了解圖靈IT青年俱樂部;

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

    總結

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

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