PythonDay12

来源:https://www.cnblogs.com/xuyuwei/archive/2019/08/16/11366230.html
-Advertisement-
Play Games

day12內置_函數 今日內容 生成器 推導式 內置函數一 生成器 什麼是生成器?生成器的本質就是一個迭代器 迭代器是python自帶的 生成器是程式員自己寫的一種迭代器 迭代器是python自帶的 生成器是程式員自己寫的一種迭代器 生成器編寫方式: 1.基於函數編寫 2.推導式方式編寫 1.基於函 ...


day12內置_函數

今日內容

生成器

推導式

內置函數一

生成器

什麼是生成器?生成器的本質就是一個迭代器

  • 迭代器是python自帶的

  • 生成器是程式員自己寫的一種迭代器

 

生成器編寫方式:

  • 1.基於函數編寫

  • 2.推導式方式編寫

def func():
print('這是一個函數')
return '函數'
func()

def func():
print("這是一個生成器")
yield '生成器'

# 坑!!!,其實這個生成器只能執行一個next,因為只有一個yield
func() # 生成一個生成器
print(func().__next__()) # 啟動生成器
print(func().__next__())
# 上方這句代碼的意思是:創建一個生成器並且執行一個next方法,兩句一樣但互不相干

函數體中出現yield代表要聲明一個生成器

def func():
  msg = input("請輸入內容")
  yield msg
  print("這是第二次啟動")
  yield "生成器2"
  yield "生成器3"
  yield "生成器4"

g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g)) # 不能超過yield次數

 

yield和return的區別

相同點:

  • 都是返回內容

  • 都可以返回多次,但是return寫多個只會執行一個

不同點:

  • return終止函數 yield是暫停生成器

  • yield能夠記錄當前執行位置

一個yield對應一個next

生成器的作用

# 生成器的作用是節省空間

# 可迭代對象:
#   優點: list,tuple,str 節省時間,取值方便,使用靈活(具有自己私有方法)
#   缺點: 大量消耗記憶體

# 迭代器:
#   優點:節省空間
#   缺點:不能直接查看值,使用不靈活,消耗時間,一次性,不可逆行

# 生成器:
#   優點:節省空間,人為定義
#   缺點:不能直接查看值,消耗時間,一次性,不可逆行

# 使用場景:
# 1.當文件或容器中數據量較大時,建議使用生成器

# 數據類型 (pyhton3: range() | python2 :xrange()) 都是可迭代對象 __iter__()
# 文件句柄是迭代器 __iter__() __next__()

沒有send方法就是一個迭代器,具有send方法的就是一個生成器
def func():
   lst = [1,2,3,45,6]
   lst1 = ["alex","wusir","taibi","baoyuan"]
   yield from lst
   yield from lst1
# yield 將可迭代對象一次性返回
# yield from 將可迭代對象逐個返回

g = func()

for i in g:
print(i)

推導式

列表推導式:

普通迴圈
print([i for i in range(10)])
print([變數 for迴圈])

篩選
lst = []
print([i for i in range(10) if i % 2 == 0])
print([i for i in range(10) if i > 2])
[操作後的變數 for迴圈 判斷操作]

集合推導式:

普通迴圈
print({i for i in range(10)})
{變數 for迴圈}
篩選
print({i for i in range(10) if i % 2 == 1})
{操作後的變數 for迴圈 操作}

字典推導式:

普通迴圈
print({i: i+1 for i in range(10)})
{鍵:值 for迴圈}
篩選模式
print({i:i+1 for i in range(10) if i % 2 == 0})
{操作的鍵:值 for迴圈 操作}

生成器推導式:

普通模式
tu = (i for i in range(10))
(變數 for迴圈)
篩選模式
tu = (i for i in range(10) if i > 5)
(操作後的變數 for迴圈 操作)

內置函數一

all()       判斷容器中的元素是否都為真
any() 判斷容器中的元素是否有一個為真
bytes() 將字元串進行編碼
callable() 查看對象是否可 調用 == ()
chr() 通過表位序號查找元素
complex() 複數
eval() 神器一
exec() 神器二 神器禁止使用
frozenset() 凍結集合
globals() 查看全局空間變數
hash() 區分可變數據類型和不可變數據類型
help() 查看幫助信息
id() 查看記憶體地址
locals() 查看當前空間變數
oct() 十進位轉八進位
ord() 通過元素獲取當前unicode表位的序號
pow() 冪,兩個參數是求冪,三個參數時求冪後在取餘
repr() 查看數據的原生態
round() 保留小數位
divmod() 求商和餘
bin() 十進位轉二進位

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近再學習ajax,上課老師讓我們實現一個類似百度首頁實現搜索框的功能,剛開始做的時候沒有一點頭緒,查閱大量網上的資源後,發現之前的與我們現在的有些區別,所以在此寫出來,希望能對大家有所幫助. 下麵先展示下效果圖:(ps:圖片中的文字是參考的,不具有任何的攻擊意義) 項目的目錄結構: 一:首先是lo ...
  • 寫這篇文章,就是希望讀者把本文提出的這幾個問題,經過深刻的準備後,一般來說,能囊括大部分的消息隊列的知識點。 ...
  • 1.動態導入模塊 2.包裝標準類型 3.雙下劃線開頭的attr方法: 4.反射 5.多態 6.封裝示範一 ...
  • 上某東的時候,突然給我彈了一個充氣娃娃的廣告,於是就點進去就看了一下評論,全是神評論啊。所以我就想著把大神們的評論們扒拉下來仔細瞅瞅,於是這篇文章就誕生了😄,純屬學習啊,不要想入非非啊,還有,不喜勿噴! 按照軟體設計流程來: 需求分析-功能描述-技術文檔-詳細設計-編碼-測試-交付-驗收-後期維護 ...
  • 11.4 JavaScript 11.41 變數 1、聲明變數的語法 2、變數名命名規範 3、ES6中let ES6之前js沒有塊級作用域,ES6新增了let命令,用於聲明變數(聲明的變數屬於塊級作用域),流程式控制制語句的{}就是塊級作用域。其用法類似於var,但是所聲明的變數只在let命令所在的代碼 ...
  • # 多態是指一類事物有多種行態, # 例如:動物有多種形態:人,狗,貓 # 他們有一些共同的特征:吃,喝,拉,撒 # 多態性是指在不考慮實例類型的情況下使用實例 # 對同一事物不同的類,對象有不同的響應, # 例如:放假了,有的同學回家,有的去旅游,有的去兼職 # 有的在敲代碼(就是我啦) # 列表... ...
  • # 繼承是一種創建新類的方式,新建的類可以繼承一個,或者多個父類, # 父類又可以稱為基類或者超類,新建的類可以稱為派生類,子類 class ParentClass1: # 定義父類 1 pass class ParentClass2: # 定義父類 2 pass class SubClass1(P... ...
  • 第一部分,Python基礎篇 1. 為什麼學習Python? 2. 通過什麼途徑學習的Python? 3. Python和Java、PHP、C、C 、C++等其他語言的對比? 4. 簡述解釋型和編譯型編程語言? 5. Python解釋器種類以及特點? 6. 位和位元組的關係? 7. b、B、KB、MB ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...