目錄三元表示式
列表推到式
字典生成式
生成器遞迴
可迭代物件:可迭代的物件,內建有__iter__方法的物件都是可迭代物件,除了數字型別,所有資料型別都是可迭代物件。
python內建str、list、tuple、dict、set、file都是可迭代物件
迭代器物件:執行可迭代物件的__iter__方法,執行該方法會拿到返回值,這個返回值就是可迭代物件。
為什麼要有迭代器物件:提供了一種不依賴索引取值的手段。
特點:缺點:
for迴圈稱為迭代器迴圈,in後必須是可迭代的物件。
def for1(iterable):
iterable = iterable.__iter__()
while true:
try:
print(iterable.__next__())
except stopiteration:
break
for1([1,2,3,4])
123
4
# x = 10
# y = 20
# if x > y:
# print(x)
# else:
# print(y)
print(x) if x > y else print(y)
#條件成立走這裡 if 條件 else 條件不成立走這裡
# lt =
## for i in range(10):
lt = [i**2 for i in range(10)]#此處可對i進行取冪等運算
# from typing import iterable # 匯出乙個可迭代物件型別
## print(isinstance(range(10),iterable)) # 判斷是否屬於該資料型別
print()
zip()函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。
如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。
zip 方法在 python 2 和 python 3 中的不同:在 python 3.x 中為了減少記憶體,zip() 返回的是乙個物件。如需展示列表,需手動 list() 轉換。zip 語法:如果需要了解 pyhton3 的應用,可以參考 python3 zip()。
zip([iterable, ...])
引數說明:
返回元組列表。
res = zip([1,2,3],[4,2,3,4,2,3,4,2,3],'abcadsfasdfasdf') # res是乙個迭代器,__next__返回元組
print(res.__next__()) # type:tuple
print(res.__next__()) # type:tuple
print(res.__next__()) # type:tuple
(1, 4, 'a')
(2, 2, 'b')
(3, 3, 'c')
利用zip()方法生成字典
lt1 = ['a','b','c']
lt2 = [1,2,3]
dic =
print(dic)
generator本質是乙個迭代器——》生成器:本質就是迭代器,是乙個自定義的迭代器。
g = (i for i in range(10))#生成器表示式
print(g)
for i in g:
print(i)
#列表推導式相當於直接給你一筐蛋,而生成器表示式相當於給你乙隻老母雞。
lt = [i for i in range(10)]#列表生成式
print(lt)
at 0x000001cdcb260258>01
2345
6789
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
含有yield關鍵字的函式叫做生成器
def ge():
yield 3 # 乙個yield相當於乙個next; 暫停函式
yield 4
yield 5
# print(ge()) # ge()得到乙個生成器 --> 生成器本質是迭代器
g = ge() # 得到乙個生成器
print(g.__next__())#乙個yield只能迭代一次
print(g.__next__())
#print(g.__next__())
#for i in g:
# print(i)#乙個乙個迭代,如果next沒有迭代完就繼續迭代,如果next已經將yield迭代完就停止迭代輸出
3未注釋掉最後兩行時45
注釋掉最後兩行時34
yield:
提供一種自定義迭代器的方式
yield可以暫停住函式,並提供當前的返回值
yield和return:
相同點:兩者都是在函式內部使用,都可以返回值,並且返回值沒有型別和個數的限制
不同點:return只能返回一次之;yield可以返回多次值
生成器表示式
一、直接呼叫
遞迴:在函式a內部直接呼叫函式a本身,遞迴必須要有退出條件。
寫遞迴程式的方法:先寫迴圈再替換成遞迴
def a():
global count
count += 1
print(count)
if count == 5
return
a()a()
特點:
二、間接呼叫
間接呼叫指的是:不是在原函式體內呼叫函式自身,而是通過其他的方法間接呼叫函式自身。
def bar():
print('from bar')
foo()
def foo():
print('from foo')
bar()
bar()
遞迴必須要有兩個明確的階段:
速回:遞迴必須要有乙個明確的結束條件,在滿足該條件開始一層一層回溯
遞迴的精髓在於不斷的重複逼近乙個最終的結果
'''
...age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 26
age(n) = age(n-1) +2
age(1) = 26 # n=1
'''def age(n):
if n == 1:
return 26
res = age(n-1) + 2
return res
print(f"age(5): ")
#age(5): 34
迭代器,三元表示式,列表推導式,字典生成式
迭代器 指定資料建立迭代器 使用iter 和next x 1 2,3 y iter x for i in y print i,end print 迭代物件 定義魔術方法 next 和 iter classa def init self self.x 0def next self self.x 1if...
三元表示式,列表生成式,字典生成式,生成器表示式
三元表示式 條件成立時的返回值 if 條件 else 條件不成立時的返回值 def max2 x,y if x y return x else return y 表示式 x 10 y 20 res x if x y else y print res 列表生成式 中括號生成的 l item 2 for...
三元表示式 列表推導式 生成器表示式
一 三元表示式 def max2 x,y if x y return x else return y res 條件成立時執行的表示式 if 條件 else 條件不成立時執行的表示式 x 11 y 22 res x 12 if x y else y 100 print res 二 列表推導式 1 示例...