python_August(迭代器、生成式)

yybokeyuan發表於2024-09-05

目錄
  • 迭代器
  • 三元表示式
  • 列表推導式
  • 字典生成器
    • 拉鍊函式

迭代器

可迭代物件: 只要擁有iter方法的物件就是可迭代物件,下面的除了前兩個,從字串開始都是可迭代物件

height = 180	#整型
salary = 3.2	#浮點型
name = 'nick'	#字串
hobby_list1 = ['run','read']	#列表
hobby_tup = ('run','read')		#元組
info_dict1 = {'name':'nick','weight':140}	#字典
hobby_set = {'read','run','run'}	#集合

在後面加點,然後打一個iter再按Tab鍵就能出來_iter_

列表使用iter

hobby_list = ['run','read']
hobby_list_iter = hobby_list.__iter__()  #把列表變成可迭代物件

print(hobby_list_iter.__next__())	##輸出run
print(hobby_list_iter.__next__())	##輸出read
##再多輸出一行就會報錯

字典使用iter

info_dict = {'name':'nick','weight':140}
info_dict_iter = info_dict.__iter__()

print(info_dict_iter.__next__())	##輸出name
print(info_dict_iter.__next__())	##輸出weight
###改成value就會是nick、140

迭代器物件:擁有__iter__方法——>可迭代物件擁有__next__方法的才是迭代器物件,檔案本身就是迭代器物件

  • 先加iter變成迭代器物件,再加next變成迭代器

下面這個就是使用迭代器後,就不用使用for進行for i in xx給他列出

# 這一段程式碼如果用c寫,就是for迴圈的原理
hobby_list2 = ['run','read']
hobby_list2_iter = hobby_list2.__iter__()
while True:
    try:
        print(hobby_list2_iter.__next__())
    except:
        break


三元表示式

dog_name = 'fenggou'
#  不推薦使用,你以後寫程式,程式是越容易看懂越好,而不是寫成一行,讓別人說你是傻逼
print('遠離他') if dog_name == 'fenggou' else print('盤他')

列表推導式

 [i*2 for i in range(100)]
print(lis)	###輸出0~198(而且是偶數)

# 千萬不要寫這樣的東西,否則真的會被罵傻逼
lis1 = [i * 2 if i > 50 else i for i in range(100)]
print(lis1)	###輸出前五十一個是0到50,其餘是兩倍

字典生成器

dic= dict.fromkeys([1,2,3,4],2)###有關fromkeys的使用忘了可以再看看
print(dic2)

keys = ['L','Y','M']
default_value = []
dic1 = dict.fromkeys(keys,default_value)###default_value的東西每個key拿到的一樣
print(dic1)
default_value.append(1000)
print(dic1)

dic2 = {i:i**2 for i in range(10)}
print(dic)

#####分別輸出
{1: 2, 2: 2, 3: 2, 4: 2}
{'L': [], 'Y': [], 'M': []}
{'L': ['1000'], 'Y': ['1000'], 'M': ['1000']}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

拉鍊函式

# 拉鍊函式
res = zip('abcd',[1,2,3,4])
print(res)  ##輸出<zip object at 0x000002575EFAA040>
dic = dict()  #先定義一個空字典
for k,v in res:
    dic[k] = v  #res指向值放進去
print(dic)
####一個式子把上面的寫完
print({k:v for k,v in zip('abcd',[1,2,3,4])})

相關文章