python中常見的對象辨析(可迭代對象、迭代器對象、生成器對象)

2021-01-08 藍一代碼

一 可迭代對象Iterable

A.定義

可作用於for循環的對象叫可迭代對象

B.包括

1.集合數據類型 序列,字典,集合

2.迭代器對象

C.訪問可迭代對象

1.集合數據類型使用各自的訪問方法

2.迭代器對象使用迭代器對象訪問的方法

D.注意

1.具有__iter()__方法的可迭代對象具有可使用iter()函數變為迭代器對象

2.數值型可迭代對象即序列、字典、集合對應的可迭代對象

二 迭代器對象Iterator

A.定義

可作用於next()函數並能不斷調用的對象叫迭代 器對象

B.包括

1.iter(具有__iter__方法的對象)的返回值

2.生成器

C.訪問迭代器

1.循環遍歷訪問

2.使用next()方法訪問

next(迭代器,標誌位)當連續調用時,依次返回迭代器的元素,並記錄當前位置(同指針),當超出時無標誌位時會報Stoplteration異常,有標誌位時返回標誌位。

D.注意

1.迭代器對象一定具有__next()__方法<才可以使用next函數>

2.迭代器指針只能前進,不能調整和後退。

3.迭代器對象可使用序列轉換函數轉換為序列,但只能轉換未被迭代的部分

4.序列的迭代單位由所屬對象中自定義迭代方式決定<__next__方法>

>序列迭代器(以元素為迭代單位)

>文件迭代器(以行為迭代單位),

三 生成器對象

A.定義

生成器對象是一個存儲算法並能記錄上次位置的對象<惰性對象>

B.包括

1.元組生成式

2.帶有yield關鍵字的函數

def fib():

i = 0

while True:

yield i(返回) 或 i = yield(接收)

i = i+1

......

return StopIteration報錯內容

C.方法

1.發送值方法

>obj.send(x) 發送x給生成器函數<有yield接收時,發送值才有效>

2.調用值方法

>next(obj)<因為生成器也是迭代器的一種所以可以使用next函數>

>obj.send(x)<使用send方法時,第一次取值x必須為None,之後無要求>

D.注意

1.在函數中每次遇到yield關鍵字,程序都會凍結,有兩種情況

>yield用於返回值(相當於return)

若yield後有參,則函數返回該參數

>yield用於接收值(相當於一個形參)

若yield無參,則yield將擁有即send函數發送的值。若使用next()調用則yield的值為None.

2.注意

>生成器<函數>運行結束時(正常結束/遇到return結束),會拋出StopIteration錯誤,return的返回值會自動作為錯誤說明。

四 可調用對象(callable)

A.定義

實例化前,實現了__call__ 方法的對象為可調用對象

B.包括

1.所有函數

>函數發生調用行為時返回的是函數的返回值

2.所有類

類發生調用行為時返回的是類的實例

3.實現__call__方法的實例

實例發生調用行為時返回的是__call__方法的返回值

C.其它

1.判斷對象是否為可調用對象 callable(obj)返回True/False

2.可調用對象的調用方式:

可使用一對括號()來實現調用 callable_obj()

callable_obj()等價於callable.__call__()

3.可調用對象和函數語法規則完全相同,包括基本概念、參數處理、返回值

相關焦點

  • 第66p,概念:生成器、迭代器與迭代對象(下)
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第X篇文章,第三階段的課程:Python進階知識:生成器、迭代器與迭代對象(下)。一、生成器1、什麼是生成器?自定義器迭代器就是生成器(generator);生成器就是迭代器;2、如何得到自定義的迭代器:在函數內存在yield關鍵字,調用函數時並不會執行函數體代碼;而是返回一個生成器對象(generator),這個生成器就是自定義的迭代器;3、生成器的執行過程A.
  • python迭代器和生成器總結——新的斐波那契數列
    給定一個集合,循環對集合中的每個元素應用某個操作,稱之為迭代。python迭代器題目:給定一個序列,循環輸出序列中的每個元素。通過一個for循環就可以實現,如下:for循環遍歷結果事實上,python中,提供了另一個工具來幫助遍歷,該工具稱之為迭代器。可以通過iter函數來獲取一個迭代器,通過next函數來獲取下一個元素。如下:
  • Python3中的生成器函數
    ' ret = func2() # 並沒有執行函數,而是返回一個生成器對象print(ret)'''結果:''' 2:生成器函數的本質 生成器函數本質就是一個迭代器:函數中如果包含一條yield語句,那麼Python就會將它編譯為生成器,這個函數不再是普通函數,而是作為返回支持迭代協議的對象的函數
  • Python數據讀取之生成器(generator)
    Python生成器是創建迭代器的簡單方法。簡單來說,生成器是一個函數,它返回一個我們可以迭代的對象(迭代器),迭代器一次返回一個值較使用列表將所有數據都加載到內存中,生成器節省了大量內存空間。深度學習的數據讀取部分一般都需要使用迭代器。
  • python動態添加類對象成員:變量、函數
    一般類對象新增變量或方法的過程在面向對象(OOP)的編程方法中,如果需要給實例化的類對象新增方法或者屬性,一般都是在class類的定義中新增內容,然後才能用類對象來調用新增的方法或變量。pythonyu'yan那麼下面就以下圖中的代碼為例,為大家演示如何給python中的類對象動態的添加變量
  • Python生成器函數概述:運用實例分解說明機制
    生成器函數會通過參數實例化並存於變量g之中。那麼,當 next()明確調用生產器對象時,生產器就必須進行迭代以產出值。而且,一旦產出(單個)值,生產器就會停止運作,此時繼續調用next()會導致 「StopIteration」異常。但如果在for循環中迭代生成器函數,for中包含的底層迭代機制就會巧妙地處理StopIteration異常。
  • Python每日3題-為什麼函數名字可以當做參數用?
    Python中一切皆對象,函數名是函數在內存中的空間,也是一個對象 裝飾器的返回值也是一個函數的對象,它經常用於有切面需求的場景。比如:插入日誌,性能測試,事務處理,緩存。權限的校驗等場景,有了裝飾器就可以抽離出大量的與函數功能本身無關的雷同代碼並發並繼續使用。 [Hard] 生成器,迭代器的區別? 思考30秒再往下翻...
  • numpy中的數據類型對象有哪些
    數據類型以上就是一系列Numpy中提供的數據類型。需要理解的是,Numpy中的數據類型,和python本身的數據類型是不同的。Numpy中的數據類型,實質是數據類型對象dtype的實例。Numpy中的Ndarray對象可以幫助我們構建N維數組對象。我們知道,對於數組來說,最大特點是,對於給定長度的數組,其在內存中所佔用的空間大小是預先分配的,並且,每個元素所佔用的空間大小是相當的。那麼,Ndarray怎麼計算每個元素所佔用的空間大小呢?就是根據dtype。換句話說,dtype定義中,應該包含類型的名字,並且,能夠明確該類型實例佔用的內存空間大小。
  • 理解yield和生成器
    要理解什麼是yield,必須理解什麼是生成器(generator)。在理解生成器之前,讓我們先了解迭代。迭代當你建立了一個列表,你可以逐個地訪問這個列表的元素,而這個訪問的過程叫做迭代(iteration)代碼中的mylist就是一個可迭代對象(iterable),當你使用列表生成式時,你就創建了一個list,同時也創建了一個可迭代對象:凡是能使用for...in...語句的對象,都叫做可迭代對象,例如:list、string、文件等等
  • JSON對象和簡單練習
    本篇就來看看JSON是如何解決上一篇字符串傳給瀏覽器的代碼,以及JSON對象中常見的操作。所以,使用JSON對象一句話就搞定了,比前面字符串拼接簡單多了。下面,來看看JSON的常見幾個操作。3 JSON對象常見操作這裡,還是在這個圖書項目,新建一個json的包,然後新建一個JSONTest.java類我們來寫一個測試用例,作用就是把JavaBean對象轉成JSON格式的Sting.
  • 靈活編碼要義:Python中一切皆對象
    全文共1560字,預計學習時長7分鐘Python是一門真正意義上面向對象的程式語言,你或許也聽過這句話:Python中一切皆對象。而談及對象,人們通常將之引用到數據集,並稱其為屬性,且對象具有某種預定義函數來更新這些數據或與其他對象交換數據。但實際上,函數也是一種對象。為什麼這樣講?往下看吧!
  • opencv-python獲取圖像:面向對象與面向過程
    下面是分別用面向過程與面向對象的編程方法實現讀取本地圖像和打開攝像頭兩段代碼:# -*- coding: utf-8 -*-"""面向過程的編程方法,用函數把解決問題的步驟一步一步實現。運行環境:win10系統 python==3.6 opencv-contrib-python== 4.1.0第一行「# -*- coding: utf-8 -*-」 告訴Python解釋器,按照UTF-8編碼讀取原始碼"""import cv2image=cv2.imread('lena.JPG') #讀取本地圖片,
  • JavaScript-Date對象及Math對象
    創建一個Date對象,如果直接使用構造函數創建一個Date對象,則會封裝為當前代碼執行的時間var
  • 嘿,你對象在這兒——Java 面向對象編程:類和對象
    等到我們學面向對象的時候不得不去了解一下什麼是類,什麼是對象,他倆是啥關係。關於面向對象,網上那個寫得很好的例子已經被我抄到C語言與Java的區別那篇了,感興趣的小夥伴可以點左上角的菜單去查看。那麼類和對象到底是什麼呢?類就是有某些共同特徵的實體的集合;對象就是類的實例,一個對象當然就是一個類的實例。
  • 打基礎一定要吃透這12類 Python 內置函數
    相關內置函數len() 返回一個對象中的元素的個數sorted() 對可迭代對象進行排序操作 (lamda)語法:sorted(Iterable, key=函數(排序規則), reverse=False)Iterable: 可迭代對象key: 排序規則(排序函數), 在sorted內部會將可迭代對象中的每一個元素傳遞給這個函數的參數.
  • Python使用redis存儲對象
    Python總的對象存儲到redis中默認為字符串,那麼如何存儲對象呢?下面就看看如何直接將Python中對象存儲到redis中先寫個測試redis是否正常連接上import rediscache = redis.StrictRedis('172.20.0.227',6379)
  • 面向對象編程
    面向對象編程(OOP)對於初學者來說可能是一個很難理解的概念。很多書籍都是從解釋OOP開始,討論三大術語:封裝、繼承和多態性,但是解釋的效果往往讓人失望。本文希望讓程式設計師、數據科學家和python愛好者們更容易理解這個概念。我們去掉所有的行話,通過一些例子來做解說。這篇文章是關於解釋OOP的外行方式。
  • 面向對象特性之三:多態(Python進階教程)
    今天我們還是用例子來說明在Python中多態的使用方法、注意事項和使用的優點。這兩個類實例化對象後,都調用各自的「送貨」方法後,我們看到,輸出的結果是不一樣的,也就是說,它們分別執行了各自類中的方法。像上例中,不同的對象(海運部門和空運部門)雖然執行的方法(送貨)是同一個,但是執行的結果是不一樣的,在面向對象的程序設計中,通過相同的函數方法名去執行不同的動作,可以得到不同的結果,這樣的程序設計方法就叫做多態;多態的思想其實是一類事物具有多種形態,就像上例,「部門類」具有多種形態,分別是「海運部門
  • 前端瀏覽器對象模型BOM常用對象用法介紹
    前端瀏覽器對象模型BOM常用對象介紹,BOM即Broswer Object Model 瀏覽器對象模型,在JavaScript中可以理解為window對象,用來進行與瀏覽器相關的一些操作,學習BOM就是學習 JavaScript中的window對象。