一.列表推導(dǎo)式
-->列表推導(dǎo)式:需要使用for循環(huán)來(lái)生成一個(gè)新列表時(shí),可用到列表推導(dǎo)式
-->格式:【表達(dá)式 for 變量 in 舊列表 if 條件】
-->實(shí)例
for循環(huán)
lst = [0,1,2,3,4,5,6,7,8,9]
?lst2 = []
?for j in lst:
? ? ?if j % 3 == 0:
? ? ? ? lst2.append(j)
print(lst2)
# [0, 3, 6, 9]
列表推導(dǎo)式
new_list = [ifor iin range(0,10)if i %3 ==0]
print(new_list)
# [0, 3, 6, 9]
二.生成器
-->產(chǎn)生:生成器可以一邊循環(huán)一邊進(jìn)行計(jì)算,不用一下子就生成一個(gè)很大的集合撤嫩,占用內(nèi)存空間。
-->優(yōu)點(diǎn) : 生成器的使用節(jié)省內(nèi)存空間增炭。
-->創(chuàng)建:
? ? ? ??1.列表推導(dǎo)式秸仙,把一個(gè)列表生成式的 [ ] 改成( )
l = [i *3 for iin range(10)]
print(type(l))????<class 'list'>
r = (i *3 for iin range(10))
print(type(r))????<class 'generator'>
-->遍歷生成器對(duì)象中的內(nèi)容:
for iin r:
print(i)
0? ? 3? ? 6? ? 9? ? 12? ? 15? ? 18? ? 21? ? 24? ? 27
-->獲取元素._next_(),或者next()
print(r.__next__()) ????#0
print(r.__next__())???? #3
print(next(r))? ????#6
print(next(r))? ????#9
?2.函數(shù),只要函數(shù)中出現(xiàn)yield,函數(shù)變成生成器函數(shù),簡(jiǎn)單來(lái)說(shuō):只要在def中有yield關(guān)鍵字的 就稱為 生成器
def f1():
????num =0
? ? while True:
????????????num +=1
? ? yield num
g = f1()
print(type(g))? ? ? ? //<class 'generator'>
print(g.__next__())???????? # 1
print(g.__next__())???????? # 2
print(next(g))???????????? # 3
print(next(g))???????????? # 4
三.迭代器
? ? 迭代:? 獲取元素
? ? 可迭代對(duì)象? ? ? ? 1.列表 字典 集合 元組 字符串....?????????? 2.生成器
? ? ? ? -->如何判斷一個(gè)對(duì)象是否是可迭代的
????????-->isinstance() 判斷一個(gè)對(duì)象是否是另一個(gè)對(duì)象的實(shí)例
import collections
lst = [1,2,3,4]
g = (xfor xin range(10))
print(isinstance(lst, collections.Iterable))? ? #True
print(isinstance('123', collections.Iterable))? ? #True
print(isinstance(123, collections.Iterable))? ? #False
print(isinstance(g, collections.Iterable))? ? #True
-->迭代器 可以被next()函數(shù)調(diào)用袋坑,并不斷返回下一個(gè)值的對(duì)象
-->可迭代對(duì)象? != 迭代器
lst = [1,2,3,4]
print(next(lst))? ? #'list' object is not an iterator
# 通過(guò)iter()函數(shù)將可迭代對(duì)象編程迭代器
lst =iter(lst)
print(next(lst))????????#1
四.面向?qū)ο蠛?jiǎn)介
? ? ? ? -->程序運(yùn)行當(dāng)中,數(shù)據(jù)存放在內(nèi)存中被CPU運(yùn)行
? ? ? ? -->對(duì)象是內(nèi)存中用來(lái)存儲(chǔ)數(shù)據(jù)的一塊區(qū)域
? ? 對(duì)象的結(jié)構(gòu):????1.id????????2.type????????3.value
類class
????--> int str list ...python內(nèi)置對(duì)象 ,它們無(wú)法滿足需求,因此需要自定義對(duì)象
class MyClass():
????????pass
print(MyClass)????????<class '__main__.MyClass'>
a = MyClass
print(type(a))????????????<class 'type'>
-->對(duì)象實(shí)例
# 定義一個(gè)狗的類
# 在類的代碼中,可以定義變量和函數(shù),這些可以被這個(gè)類創(chuàng)建出的所有對(duì)象訪問(wèn)
# 變量作為這個(gè)類的屬性(name age ..),函數(shù)作為類的方法(run speak...)
# 訪問(wèn)屬性 實(shí)例咙崎。屬性名
# 訪問(wèn)方法 實(shí)例的函數(shù)名()
class Dog():
????# 定義屬性
? ? name ="小黑"
? ? age ="2"
? ? # 定義方法
? ? def run():
????????print("running...")
dog1 = Dog????????????????????
print(dog1.name)????????????# 小黑
print(dog1.age)???????????? ?# 2
dog1.run()???????????????????? # running...