python教程之生成器和匿名函式

2022-09-26 12:09:16 字數 1671 閱讀 2294

目錄

記住兩個關鍵:

初學的你,還是太難理解?

你可以將生成器理解為乙個盒子,你可以向這個盒子裡隨意新增元素,當你需要的時候,再取出來用。

請看下面的例子:

# 普通函式

def func():

return 1

f = func()

print("函式返回值:",f)

->函式返回值:1

print("函式返回值的型別:",type(f))

->函式返回值的型別:

# 生成器

def gen\_func():

yield 1

yield 2

g = gen_func()

print("生成器物件:",g)

->生成器物件:object gen\_func at 0x00000189b8cff7c8>

print("生成器物件的型別:",type(g))

->生成器物件的型別:

# 讀取生成器物件的值,因為生成器也是乙個迭代器,實現了python的迭代協議(即實現了\_\_iter\_\_方法)

for i in g:

print("生成器物件的值:",i)

->生成器物件的值: 1

->生成器物件的值: 2

作用:惰性求值(一邊迴圈一邊計算的機制),節省效能

舉個例子:斐波那契數列(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)

當:初學的你,還是太難理解?

你想實現乙個求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如果你是初學者,可以先不掌握生成器和匿名函式,待學成pyth程式設計客棧on後,再行琢磨;

2在實際工作中,生成器和匿名函式的使用頻次,相對較高,並且在面試中是高頻問點。

本文標題: python教程之生成器和匿名函式

本文位址: /jiaoben/python/452716.html

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...

python生成器好處 Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...