程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

一文徹底講透Python列表推導式、迭代器、生成器、匿名函數

編輯:Python

大家好,在使用Python 經常會遇到匿名函數、推導式、迭代器和生成器,這些方法非常重要。今天我給大家一次性將明白,喜歡記得收藏、關注、點贊。

注:文末提供技術交流、經驗分享、資料

1、匿名函數(lambda)

個人理解為一種簡單的定義函數的方式,不需要使用def關鍵字定義函數。語法:lambda 參數:操作參數表達式。

add = lambda x, y: x + y
print(add(3, 5))

8

list(map(lambda x, y: x + y, range(-2, 2), range(1, 5)))
#傳入兩個iterable對象range(-2, 2), range(1, 5)

[-1, 1, 3, 5]

2、推導式(comprehensions)

列表,字典和集合中都可以使用推導式。

列表推導式

一種簡單創建列表的方法。

#if 語句置於for之後
In [29]: [x for x in range(1, 11) if x % 2 == 0]
#對於range(1, 11)中每個元素,能被2整除的輸出組成新列表
Out[29]: [2, 4, 6, 8, 10]
#if 語句置於for之前可以使用else
In [30]: [x if x % 2 == 0 else -x for x in range(1, 11)]
#對於range(1, 11)中每個元素,能被2整除的輸出原值,不能整除的取原值負數輸出,組成新列表
Out[30]: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]

字典推導式

mcase = {
'a': 10, 'b': 34, 'A': 7, 'Z': 3}
{
k:v for k,v in mcase.items()}

{‘a’: 10, ‘b’: 34, ‘A’: 7, ‘Z’: 3}

集合推導式

{
x**2 for x in [1, 1, 2]}#集合不允許重復

{1, 4}

3、迭代器(Iterator)

可迭代對象(Iterable)

python中的對象,只要具有方法__iter__和__getitem__就是可迭代對象,可迭代對象能提供迭代器。

迭代器(Iterator)

被定義了__next__方法的python對象。

判斷對象是否是可迭代對象或迭代器

from collections.abc import Iterable, Iterator
def g():
yield 1
yield 2
yield 3
#是否為python可迭代對象判斷
print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable))#isinstance()判斷一個對象是否是Iterable對象
print('Iterable? \'abc\':', isinstance('abc', Iterable))
print('Iterable? 123:', isinstance(123, Iterable))
print('Iterable? g():', isinstance(g(), Iterable))
#是否為python迭代器判斷
print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator))#isinstance()判斷一個對象是否是Iterator對象
print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator))
print('Iterator? \'abc\':', isinstance('abc', Iterator))
print('Iterator? 123:', isinstance(123, Iterator))
print('Iterator? g():', isinstance(g(), Iterator))
Iterable? [1, 2, 3]: True
Iterable? 'abc': True
Iterable? 123: False
Iterable? g(): True
Iterator? [1, 2, 3]: False
Iterator? iter([1, 2, 3]): True
Iterator? 'abc': False
Iterator? 123: False
Iterator? g(): True

迭代(Iteration)

使用一個循環來遍歷某個python對象時,這個過程就叫迭代。

4、生成器(Generators)

生成器也是一種迭代器,但是,只能對其迭代一次。這是因為它們並沒有把所有的值存在內存中(可節省大量內存),而是邊循環邊生成值(生成器保存算法,可以計算下一個元素的值),創建生成器方法如下:

( )包圍列表推導式生成

g = (x * x for x in range(10))#只迭代一次,只存儲算法,不會生成所有元素存儲於內存。
g

<generator object at 0x000002B53772C4C0>

for i in g:#for循環打印每個生成器中元素,在執行輸出nothing(只迭代一次,只存儲算法)
print(i)

0149162536496481

自定義函數中添加yield關鍵字構建生成器

推算算法很復雜時使用自定義函數。舉個例子,計算斐波那契數列的生成器。

def fibon(n):
a = b = 1
for i in range(n):
yield a#該函數為一個生成器
a, b = b, a + b
for x in fibon(1000000):
print(x) #不用擔心它會使用大量資源 

推薦文章

  • 李宏毅《機器學習》國語課程(2022)來了

  • 有人把吳恩達老師的機器學習和深度學習做成了中文版

  • 上瘾了,最近又給公司撸了一個可視化大屏(附源碼)

  • 如此優雅,4款 Python 自動數據分析神器真香啊

  • 梳理半月有余,精心准備了17張知識思維導圖,這次要講清統計學

  • 年終匯總:20份可視化大屏模板,直接套用真香(文末附源碼)

技術交流

歡迎轉載、收藏、有所收獲點贊支持一下!數據、代碼可以找我獲取

目前開通了技術交流群,群友已超過2000人,添加時最好的備注方式為:來源+興趣方向,方便找到志同道合的朋友

  • 方式①、發送如下圖片至微信,長按識別,後台回復:加群;
  • 方式②、添加微信號:dkl88191,備注:來自CSDN
  • 方式③、微信搜索公眾號:Python學習與數據挖掘,後台回復:加群


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved