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)
(res)
> 100
三元表示式
defmax1(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:
(new_list)
#普通方式
new_list =
for line in range(1,101):
(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>
(g)#
列表生成式實現
list1 = [line for line in range(1, 1000001)]
print(list1)
無名字的函式
:左邊是引數, 右邊是返回值
lambda :
ps: 原因,因為沒有名字,函式的呼叫 函式名 + ()匿名函式需要一次性使用。
注意: 匿名函式單獨使用毫無意義,它必須配合 「內建函式」 一起使用的才有意義
deffunc():
return 1
print(func()) #
func函式物件 + ()
print(func())
def():
pass
()
#+ ()
lambda 匿名(): return 1func = lambda : 1
(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 第一...