生成器 表示式

2022-07-24 09:33:09 字數 3235 閱讀 2595

1.什麼是生成器?生成的工具。生成器是乙個 "自定義" 的迭代器, 本質上是乙個迭代器。

2.如何實現生成器但凡在函式內部定義了的yield,呼叫函式時,函式體**不會執行,會返回乙個結果,該結果就是乙個生成器。

yield:每一次yield都會往生成器物件中新增乙個值。- yield只能在函式內部定義- yield可以儲存函式的暫停狀態

yield與return:相同點:返回值的個數都是無限制的。

不同點:return只能返回一次值,yield可以返回多個值

迭代器物件 python內建生成的迭代器

iter_list = list1.__ iter __()

#自定義的迭代器

def func():

print('from func')

yield 'tank'

res = func()

#當我們通過__ next __取值時,才會執行函式體**。

print(res.__ next __())

迴圈10次

for i in range(1,11):

print(i) #

1~~10

python2: range(1,5) --->[1, 2, 3, 4]

python3:range(1,5) --->range物件--->生成器 ---->迭代器

res = range(1,5)

print(res)

#

自定義range功能,建立乙個自定義的生成器

#(1, 3) #start --> 1 , end --->5 , move = 2

def my_range(start,end,move = 1):

​ while start ​ yield

start

​ start += move

面向過程程式設計是一門程式設計思想。

面向 過程 程式設計:核心是 '過程' 二字,過程 指的是一種解決問題的步驟,即先幹什麼再幹什麼基於該程式設計思想編寫程式,就好比在設計一條工廠流水線,一種機械式的思維方式。

優點:將複雜的問題流程化,進而簡單化

缺點:若修改當前程式設計的某一部分,會導致其他部分同時需要修改,擴充套件性差。

三元表示式:

可以將if...else...分支變成一行。

語法:條件成立返回左邊的值 if 判斷條件else 條件不成立返回右邊的值

if

判斷條件:

​ 執行

else

:​ 執行

求兩個值的大小

通過if...else語法

defmax(num1,num2):

if num1 >num2:

return

num1

else

:​

return

num2

res = max(100,20)

print

(res)

> 100

三元表示式

def

max1(num1,num2):

res = num1 if num1 > num2 else

num2

return

resres =max1(num1,num2)

print(res)

列表生成式:

可以一行實現生成列表。語法:list = [取出的每乙個值、任意值 for 可迭代物件中取出的每乙個值 in 可迭代物件]

for的右邊是迴圈次數,並且可以取出可迭代物件中每乙個值

for的左邊可以為當前列表新增值

list = [值 for 可迭代物件中取出的每乙個值 in 可迭代物件]

list = [值 for 可迭代物件中取出的每乙個值 in 可迭代物件 if 判斷]

將list中的值,依次取出,新增到new_list中

list = [1, 2, 3, 4]

new_list =

for line in

list1:

print

(new_list)

#普通方式

new_list =

for line in range(1,101):

print

(new_list)

#列表生成器

list = [f'1'

for line in range(1,101)]

print(list)

列表生成式: 若資料量小時採用[line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]

優點:可以依賴於索引取值,取值方便

缺點:浪費資源

優點:節省資源

缺點:取值不方便

#

生成乙個有1000個值的生成器

g = (line for line in range(1, 1000001))

#at 0x00000203262318e0>

print

(g)#

列表生成式實現

list1 = [line for line in range(1, 1000001)]

print(list1)

無名字的函式

:左邊是引數, 右邊是返回值

lambda :

ps: 原因,因為沒有名字,函式的呼叫 函式名 + ()匿名函式需要一次性使用。

注意: 匿名函式單獨使用毫無意義,它必須配合 「內建函式」 一起使用的才有意義

def

func():

return 1

print(func()) #

func函式物件 + ()

print(func())

def

():

pass

()

#+ ()

lambda 匿名(): return 1func = lambda : 1

print

(func())

func = lambda : 1

print()

生成器表示式

生成器 生成器本質是迭代器,允許自定義邏輯的迭代器 迭代器和生成器區別 迭代器本身是系統內建的.重寫不了.而生成器是使用者自定義的,可以重寫迭代邏輯 生成器可以用兩種方式建立 1 生成器表示式 裡面是推導式,外面用圓括號 2 生成器函式 用def定義,裡面含有yield 1 生成器表示式 gener...

生成器表示式

把列表推導式的換成 就是生成器表示式 示例 把生一筐雞蛋變成給你乙隻老母雞,這也是生成器的特性 chicken 雞蛋 s item for item in range 10 print chicken 生成器物件記憶體位址 print next chicken 雞蛋0 print next chic...

生成器表示式

普通的求和函式 def add n,i return n i 生成器物件 返回 0 1 2 3 def test for i in range 4 yield i 將test函式變成生成器物件 g test 簡單的for迴圈 for n in 1,10 g add n,i for i in g 第一...