本節大綱: 一:在執行list()函數或者dict()函數首先是調用list()函數或者dict()方法會自動調用該函數的__init__方法進行數據的初始化,list()函數通過一個可迭代的對象,用for迴圈進行遍歷插值。 上述的過程:首先list()函數調用本身的__init__方法進行數據的初 ...
本節大綱:
一:在執行list()函數或者dict()函數首先是調用list()函數或者dict()方法會自動調用該函數的__init__方法進行數據的初始化,list()函數通過一個可迭代的對象,用for迴圈進行遍歷插值。
list_test=list((1,2,3,)) print(list_test) [1, 2, 3]
上述的過程:首先list()函數調用本身的__init__方法進行數據的初始化,通過for迴圈,把元組(1,2,3,) 遍歷插入列表[1,2,3,]
二:集合
集合是無序數據類型,元素不可以重合。如果集合內元素重覆會自動去重。用大括弧表示和字典表示一樣,字典是無序的數據類型,但是key-value的映射。
1 set_a=set([1,2,2,3,]) 2 print(set_a) 3 4 {1, 2, 3}
可以通過內部函數set()對集合進行轉換。字典、字元串、列表都可以轉換成集合。
1 set_b=set({'name':'evil',}) 2 set_c=set('evil') 3 set_d=set([1,2,3,]) 4 print(set_b,set_c,set_d) 5 6 {'name'} {'i', 'l', 'e', 'v'} {1, 2, 3}
1、操作集合
1)add()函數。添加元素給集合。
1 s_tets=set() 2 s_tets.add(456) 3 s_tets.add(456) 4 s_tets.add(456) 5 print(s_tets) 6 {456}
應用場景:爬蟲。在返回url保存的時候可以用集合操作,預設去除重覆的元素。
2)difference()函數。比如a.difference(b)表示a存在元素b不存在元素。但是a和b本身的集合不發生改變。
1 s1_testa={1,2,3,} 2 s2_testb={2,5,6,} 3 print(s1_testa.difference(s2_testb)) 4 print(s2_testb.difference(s1_testa)) 5 print(s2_testb,s1_testa) 6 7 {1, 3} 8 {5, 6} 9 {2, 5, 6} {1, 2, 3}
3、symmetric_difference()函數,比如a.symmetric_difference(b)表示a和b集合去掉交集部分的結合。並不能改變集合a和b的值。
s1_testa={1,2,3,} s2_testb={2,5,6,} print(s1_testa.symmetric_difference(s2_testb)) print(s2_testb,s1_testa) {1, 3, 5, 6} {2, 5, 6} {1, 2, 3}
3)上述的操作不能修改原集合的值。如果想修改原集合的值。用如下函數:a.difference_update(b)函數。會修改集合a的值。b值不變。a值會變成。a存在的元素且b不存在的元素的值。
1 set_a={1,2,3,4,} 2 set_b={'c',6,3,5,} 3 set_a.difference_update(set_b) 4 print(set_a) 5 print(set_b) 6 {1, 2, 4} 7 {'c', 3, 5, 6}
4)同樣a.symmetric_difference_update(b)函數也會修改a的值,使a的值變為,a、b集合的去除公共元素的集合。
1 set_a={1,2,3,4,} 2 set_b={'c',6,3,5,} 3 set_a.symmetric_difference_update(set_b) 4 print(set_a) 5 print(set_b) 6 {1, 2, 4, 5, 6, 'c'} 7 {3, 5, 6, 'c'}
5)刪除集合指定元素。discard()函數。如果該元素不存在不會報錯。
1 set_a={1,2,3,4,} 2 set_a.discard(1) 3 print(set_a) 4 set_a.discard(111) 5 print(set_a) 6 {2, 3, 4} 7 {2, 3, 4}
同樣也可以用remove()函數,但是不存在元素會報錯。KeyError: 111
1 set_a={1,2,3,4,} 2 set_a.remove(111) 3 print(set_a) 4 set_a.remove(111) 5 KeyError: 111 6 7 set_a={1,2,3,4,} 8 set_a.remove(4) 9 print(set_a) 10 {1, 2, 3}
也可以用pop()函數刪除元素。但是隨即刪除一個元素。
1 set_a={1,2,3,4,5,6,7,8} 2 set_a.pop() 3 print(set_a) 4 5 {2, 3, 4, 5, 6, 7, 8}
6)批量添加元素。用update()函數。通過for迴圈對迭代的對象(比如說列表,字元串,字典的keys以及字典的value值),進行add()操作添加。
1 1 set_a=set() 2 2 list_a=[1,2,3,4,5,4] 3 3 set_a.update(list_a) 4 4 print(set_a) 5 5 {1, 2, 3, 4, 5} 6 7 set_a=set() 8 set_b=set() 9 list_a={'name':'evil','age':22} 10 list_b={'name':'evil','age':22} 11 set_a.update(list_a)##預設對key值進行迭代。 12 print(set_a) 13 set_b.update(list_b.values()) 14 print(set_b) 15 {'name', 'age'} 16 {'evil', 22}
7)當我們在執行一些列表或者其他操作的時候,會調用list()函數的一些方法。比如:
1 list_a=[1,2,3] ##調用list的__init__方法 2 print(list_a[0])##調用list的__getitem__方法 3 list_a[0]=44##調用list的__setitem__方法 4 del list_a[2]##調用list的__delitem__方法
8)在寫列表或者字典、集合、元組的時候,進行最後元素加個逗號,在以後django學習的過程中不加逗號有時候會報錯。
1 list_a=[1,2,3,] 2 dict_a={'a':2,'b':3,} 3 tuple_a=(1,2,3,)
9)集合的並集、交集。
交集函數:a.intersection(b)和a.intersection_update(b)前一個函數不改變原先集合(a,b)的值,後一個更新被交集的集合(a)。
1 s1_testa={1,2,3,} 2 s2_testb={2,5,6,} 3 s3=s1_testa.intersection(s2_testb) 4 print(s3,s1_testa,s2_testb) 5 {2} {1, 2, 3} {2, 5, 6} 6 s1_testa={1,2,3,} 7 s2_testb={2,5,6,} 8 s1_testa.intersection_update(s2_testb) 9 print(s1_testa,s2_testb) 10 {2} {2, 5, 6}
並集函數:a.union(b)
1 s1_testa={1,2,3,} 2 s2_testb={2,5,6,} 3 s3=s1_testa.union(s2_testb) 4 print(s3,s1_testa,s2_testb) 5 {1, 2, 3, 5, 6} {1, 2, 3} {2, 5, 6}
10)練習:
在cmdb日常資產管理的時候,日常伺服器檢測硬體信息收集中,如果一個伺服器4個記憶體插槽,#1、#2、#4插槽分別插,4G、8G、16G。如果現在變化#1插槽變為16G,#2不變,3#插槽插4G的,#4不插。該如何更新信息呢?
1、該刪除那個元素?
2、該更新那個元素?
3、那個元素變了,需要更新?
1 dict_old={ 2 '#1':4, 3 '#2':8, 4 '#4':16, 5 } 6 dict_new={ 7 '#1':4, 8 '#2':8, 9 '#3':4, 10 }
答案:
1 set_old=set(dict_old.keys())##生成keys值得集合 2 set_new=set(dict_new.keys()) 3 del_item=set_old.difference(set_new)##old有的new沒有的 4 print('delete item %s'%del_item) 5 up_item=set_new.difference(set_old)##new有的old沒有 6 print('add item %s'%up_item) 7 a=set_old.intersection(set_new)## old和new的集合 8 for i in a: 9 if dict_new[i]!=dict_old[i]: 10 print('update item: %s'%i)##交集的元素value值不相當,需要更新的。
三:函數:函數組成:
def functionname(parameter):###由關鍵字def進行定義,然後函數名字(functionname)和函數參數。
#function description ###函數的描述,作用;參數作用;
function body ##函數體,執行代碼
return value## 函數返回值。預設值是None。
以下是發郵件代碼:
1 def sendmail(): 2 try: 3 import smtplib 4 from email.mime.text import MIMEText 5 from email.utils import formataddr 6 msg = MIMEText('郵件內容', 'plain', 'utf-8') 7 msg['From'] = formataddr(["xxx",'xx@126.com']) 8 msg['To'] = formataddr(["走人",'xx@qq.com']) 9 msg['Subject'] = "主題" 10 11 server = smtplib.SMTP("smtp.126.com", 25) 12 server.login("username", "password") 13 server.sendmail('xxx@126.com', ['xxx@qq.com',], msg.as_string()) 14 server.quit() 15 except: 16 # 發送失敗 17 return "失敗" 18 else: 19 # 發送成功 20 return "cc" 21 22 ret = sendmail() 23 print(ret) 24 if ret == "cc": 25 print('發送成功') 26 else: 27 print("發送失敗")
執行順序: