網站首頁 編程語言 正文
生成器
01 什么是生成器?
記住兩個關鍵:
- **生成器是一種特殊的函數方法。**意味著它和函數(def)密不可分。
- 基于上一點,只要函數中出現yield關鍵字,就是生成器函數。
初學的你,還是太難理解?
02 通俗的講解
你可以將生成器理解為一個盒子,你可以向這個盒子里隨意添加元素,當你需要的時候,再取出來用。
請看下面的例子:
# 普通函數 def func(): return 1 f = func() print("函數返回值:",f) ->函數返回值:1 print("函數返回值的類型:",type(f)) ->函數返回值的類型:<class 'int'> # 生成器 def gen\_func(): yield 1 yield 2 g = gen_func() print("生成器對象:",g) ->生成器對象:object gen\_func at 0x00000189B8CFF7C8> print("生成器對象的類型:",type(g)) ->生成器對象的類型:<class 'generator'> # 讀取生成器對象的值,因為生成器也是一個迭代器,實現了python的迭代協議(即實現了\_\_iter\_\_方法) for i in g: print("生成器對象的值:",i) ->生成器對象的值: 1 ->生成器對象的值: 2
03 生成器到底有什么用?
作用:惰性求值(一邊循環一邊計算的機制),節省性能
04 生成器的常見用途?
- 讀大文件
- 網絡爬蟲 scrapy 框架
- 協程
舉個例子:斐波那契數列(0,1,1,2,3,5…),打印斐波那契數列前50個元素
# 不使用生成器,會消耗大量內存 def fib(idx): res=[] n, a, b = 0, 0, 1 while n < idx: res.append(b) a, b = b, a+b n += 1 return res res = fib(100) print(res) # 使用生成器,可節約大量內存 def gen\_fib(idx): n, a, b = 0, 0, 1 while n < idx: yield b a, b = b, a+b n += 1 for i in gen_fib(100): print(i)
匿名函數
01 什么是匿名函數?
當:
- 函數實現比較簡單
- 函數不需要被多個地方調用
- 懶得給這個函數起名字時,我們可以使用匿名函數。
初學的你,還是太難理解?
02 通俗的講解
你想實現一個求x的平方的函數,但是這個函數太簡單,不值得專門def定義,同時,你忘記了平方的英文如何拼寫,要是命名成 “pingfang”,又顯得自己太low,于是乎,你可以不給這個函數起名字,還能實現它。這就是匿名函數lambda表達式。
比如:求一個數的平方
# 不用 lambda 表達式 def square(x): return x * x print(square(2)) # 使用 lambda 表達式 # 寫法:lambda 返回值:計算表達式 s = lambda x: x * x print(s(2))
總結
1 如果你是初學者,可以先不掌握生成器和匿名函數,待學成python后,再行琢磨;
2 在實際工作中,生成器和匿名函數的使用頻次,相對較高,并且在面試中是高頻問點。
原文鏈接:https://blog.csdn.net/qq_43479892/article/details/122466079
相關推薦
- 2022-08-17 python運行腳本文件的三種方法實例_python
- 2022-09-26 淺談Redis如何應對并發訪問_Redis
- 2022-12-01 修改Nginx源碼實現worker進程隔離實現詳解_nginx
- 2022-07-08 C#使用WebClient實現上傳下載_C#教程
- 2022-10-30 Python對象循環引用垃圾回收算法詳情_python
- 2022-04-28 WPF使用DockPanel停靠面板布局_實用技巧
- 2023-02-12 JetpackCompose?Navigation導航實現流程_Android
- 2022-05-24 Python?6種基本變量操作技巧總結_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支