day 11 前方高能-迭代器

来源:https://www.cnblogs.com/yanghongtao/archive/2018/12/10/10099103.html
-Advertisement-
Play Games

第一類對象 函數名 == 變數名 函數對象可以像變數一樣進行賦值 還可以作為列表的元素進行使用 可以作為返回值返回 def wrapper(): def inner(): print("哈哈哈") return inner # 函數名可以像返回值一樣返回 ret = wrapper() ret() ...


第一類對象 -----函數名  == 變數名 函數對象可以像變數一樣進行賦值 還可以作為列表的元素進行使用 可以作為返回值返回 def wrapper():     def inner():         print("哈哈哈")     return inner  # 函數名可以像返回值一樣返回   ret = wrapper() ret() # 在函數外面訪問了函數內部的函數 函數可以進行參數進行傳遞 def func1():     print("朱祁鎮")   def func2():     print("徐階")   def func3():     print("王陽明")   def func4():     print("魏忠賢")   lst = [func1, func2, func3, func4] # 函數+() 就是調用. print(lst)    ###function func2 at 0x000001A53FB298C8>, <function func3 at 0x000001A53FB29950>, <function func4 at 0x000001A53FB299D    是一個記憶體地址 lst = [func1(), func2(), func3(), func4()]     ##函數是調用的,沒有retrun返回的是None print(lst) ###朱祁鎮 徐階 王陽明 魏忠賢 [None, None, None, None] 函數外面的訪問了函數內部的函數 def wrapper():     def inner():         print("哈哈哈")     return inner   ###函數名可以像返回值一樣返回 ret = wrapper() ret()  ##在函數外面方位了函數內部的函數 閉包------函數的嵌套       內層函數中使用外層函數的變數 優點:1.保護變數不被其他人侵害          2.保持一個變數常駐記憶體 超級簡易版爬蟲 from urllib.request import urlopen # 導入一個模塊 # 幹掉數字簽名 import ssl ssl._create_default_https_context = ssl._create_unverified_context     def func():     # 獲取到網頁中的內容, 當網速很慢的時候. 反覆的去打開這個網站. 很慢     content = urlopen("https://www.dytt8.net/").read()       def inner():         return content.decode("gbk") # 網頁內容     return inner   print("開始網路請求") ret = func() # 網路請求已經完畢 print("網路請求完畢") print("第一次", ret()[5])   ret()就是return返回的值,調用inner函數 print("第二次", ret()[5]) 如何查看一個是閉包   __closure__ 有東西就是閉包,沒有東西就不是閉包 迭代器---固定的思路.for迴圈 一個數據類型中包含了__iter__函數表示這個數據是可迭代的 dir(數據): 返回這個數據可以執行的所有操作 判斷迭代器和可迭代對象的方案(野路子)         __iter__            可迭代的         __iter__  __next__  迭代器 lst = ['賈樟柯', '利安', '楊德昌', '王家衛'] it = lst.__iter__() print(it.__next__()) print(it.__next__()) print(it.__next__()) print(it.__next__()) print(it.__next__())    ###StopIteration    停止迭代 #想回去 it = lst.__iter__()     #只能重新獲取迭代器  判斷迭代器和可迭代對象的方案(官方)         from collections import Iterable, Iterator         isinstance(對象, Iterable) 是否是可迭代的         isinstance(對象, Iterator) 是否是迭代器 官方通過代碼判斷是否是迭代器 藉助於兩個模塊 Iterator迭代器, Iterable可迭代的 from collections import Iterable, Iterator   lst = [1,2,3] # print(lst.__next__())   print(isinstance(lst, Iterable)) # xxx是否是xxx類型的. True print(isinstance(lst, Iterator)) # False   it = lst.__iter__()  # 迭代器一定可迭代,  可迭代的東西不一定是迭代器   print(isinstance(it, Iterable)) # xxx是否是xxx類型的. True print(isinstance(it, Iterator)) # True   for el in it:     print(el) 結束的時候給我們扔出來一個錯誤stopiteration 模擬for迴圈 lst= [] # 拿迭代器 it = lst.__iter__()    #獲取迭代器 while 1:     try:     #嘗試         el = it.__next__()    #數據         print(el)     except StopIteration:    #####出錯誤,意味著數據拿完了         break   #退出迴圈 特征:             1. 省記憶體(生成器)             2. 惰性機制             3. 只能向前. 不能後退 整合所有的數據類型進行遍歷(int,bool除外) 想回去:只能重新獲取迭代器 print(dir(bool)) # 沒有__iter__ for i in True: # 'bool' object is not iterable     print(i)   print(dir(range)) f = open("呵呵", mode="r", encoding="utf-8") print(dir(f))   共性:所有帶有__iter__的東西都可以進行for迴圈, 帶有__iter__的東西就是可迭代對象   lst = ["賈樟柯", "李安", "楊德昌", "王家衛"]   # 1. 只能向下執行, 不能反覆 # 2. 結束的時候會給我們扔出來一個錯誤 StopIteration # 3. 整合所有的數據類型進行遍歷(int,bool除外)   # print("__iter__" in dir(lst)) it = lst.__iter__()  # 拿到的是迭代器 <list_iterator object at 0x0000000001DCC160>   print(it.__next__()) # 下一個 print(it.__next__()) # 下一個 print(it.__next__()) # 下一個 print(it.__next__()) # 下一個 # print(it.__next__()) # 下一個 # StopIteration 停止迭代 # 想回去 it = lst.__iter__() # 只能重新獲取迭代器   s = {"張無忌", "賈樟柯", "寶寶", "風扇哥", "門神"} it = s.__iter__() print(it.__next__()) print(it.__next__()) print(it.__next__()) print(it.__next__()) print(it.__next__())  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 裝飾模式(Decorator Pattern)是一種比較常見的模式。 定義: 動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 裝飾模式類圖如下所示。 裝飾模式有以下4個角色。 抽象構件(Component)角色:用於規範需要裝飾的對象(原始對象)。 具體構件(Con ...
  • 我們首先來思考一個問題:作為工程師,我們的價值是什麼? 筆者認為是—— 解決用戶問題 。 我們的任何知識和技能,如果不能解決特定的問題,那麼就是無用的屠龍之術;我們的任何經驗,如果不能對解決新的問題有用,那這經驗就是過時的。工程師不是空談者,也不是理論家,再好的理論,再好的設計,不能落地變成產品,不 ...
  • 返回字元出現的第一個位置, 如果字元在被搜索字元串的開頭, 則會返回 ‘0’ 因此, 在使用此函數判斷 字元串是否包含 某一個字元時 使用: 1 ...
  • pom.xml(對Kaptcha.jar的引用) spring-mvc.xml(Kaptche的相關設置) BaseController.java(驗證碼獲取Controller) 前臺js(初始化驗證碼圖片) 當寫完前臺代碼,訪問login.jsp時驗證碼獲取失敗(Status Code:302 ...
  • java基礎之XML 1. XML解析概述 2. DOM4J介紹 2.1 常用包 2.2 內置元素 2.2 Element類 2.3 Attribute類 2.4 常用操作 3. 代碼演示 3.1 DOM4J讀取xml文件 3.2 DOM4J創建xml文件 3.2 DOM4J修改xml文件 ...
  • 在前面,我用了3篇文章解釋python的面向對象: 1. "面向對象:從代碼復用開始" 2. "面向對象:設置對象屬性" 3. "類和對象的名稱空間" 本篇是第4篇,用一個完整的示例來解釋面向對象的一些細節。 例子的模型是父類Employe和子類Manager,從類的定義開始,一步步完善直到類變得完 ...
  • 前面介紹了字元串變數的四種賦值方式,對於簡單的賦值來說完全夠用了,即便是兩個字元串拼接,也只需通過加號把兩個目標串連起來即可。但對於複雜的賦值來說就麻煩了,假設現在需要拼接一個很長的字元串,字元串內部包含了各種類型的變數,有整型,有雙精度型,有布爾型,有字元型,中間還夾雜著一些起粘合作用的子串,如此 ...
  • 當我們在python中需要列印出特定格式的內容時可以用到這個方法,方法介紹如下: 例如我們現在要收集用戶的一些個人信息,這時候我們的代碼如下: name=input("name: ")age=int(input("age: "))job=input("job: ")salary=input('sal ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...