Python开发Day03
生活随笔
收集整理的這篇文章主要介紹了
Python开发Day03
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
基本類型的補(bǔ)充:
-
set集合
-
介紹:
- set集合是一個(gè)無序且不重復(fù)的元素集合,我們可以使用他來對比,去重,查看重復(fù)項(xiàng)(交集),不重復(fù)項(xiàng)(差集),a有很多元素,b中有幾個(gè)元素但是元素都和a中元素相同這樣可以判斷a是不是b的父集,查看兩個(gè)合并后去掉兩個(gè)集合中的重復(fù)元素。
-
集合元素
- a={1,2,3,4,5,6,7,8,9}
- b={3,4,5,6}
-
方法:
-
?判斷a集合是不是b集合的父集或是不是子集:
print(a.issuperset(b)) #判斷a集合是不是b集合的父集,也就是說b中有的a中都有,使用True或者False返回 print(a.issubset(b)) #判斷a集合是不是b集合的子集,也就是說a中有的b中都有,使用True或者False返回 執(zhí)行結(jié)果: True False 判斷a集合是不是b集合的父集或是不是子集 - 清空集合: a.clear() print(a) 執(zhí)行結(jié)果: set() 清空集合
- 向集合中添加一個(gè)元素: a.add(10) print(a) 執(zhí)行結(jié)果: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 向集合中添加一個(gè)元素
- 向集合中添加多個(gè)元素: a.update(['a','b','c','d']) print(a) 執(zhí)行結(jié)果: {1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'c', 'd', 'b'} 向集合中添加多個(gè)元素
- 刪除a集合中的3元素(這個(gè)方法如果集合中不存在這個(gè)元素會(huì)報(bào)錯(cuò)): a.remove(3) print(a) 執(zhí)行結(jié)果: {1, 2, 4, 5, 6, 7, 8, 9} 刪除a集合中的3元素
- 刪除a集合中的8元素(該方法若是集合中沒有這個(gè)元素不會(huì)報(bào)錯(cuò)): a.discard(8) print(a) 執(zhí)行結(jié)果: {1, 2, 3, 4, 5, 6, 7, 9} 刪除a集合中的8元素
- 隨機(jī)刪除一個(gè)元素,因?yàn)榧鲜菬o序的所以它默認(rèn)是刪除最后一個(gè)可是最后一個(gè)不固定: a.pop() print(a) 執(zhí)行結(jié)果: {2, 3, 4, 5, 6, 7, 8, 9} 隨機(jī)刪除一個(gè)元素
- 輸出兩個(gè)集合中都存在的元素,產(chǎn)生一個(gè)新的值,如果需要用變量接收,或者直接查看(交集)。 print(a.intersection(b)) 執(zhí)行結(jié)果: {3, 4, 5, 6} 輸出兩個(gè)集合中都存在的元素
- 對比兩個(gè)集合中都存在的元素,修改原來的元素(交集)。 a.intersection_update(b) print(a) 執(zhí)行結(jié)果: {3, 4, 5, 6} 對比兩個(gè)集合中都存在的元素
- 判斷兩個(gè)集合中有沒交集。 print(a.isdisjoint(b)) 執(zhí)行結(jié)果: False 判斷沒有交集
- 將兩個(gè)集合合并,可以達(dá)到去重的效果(并集),如果需要值需要將執(zhí)行結(jié)果給一個(gè)變量它不會(huì)修改原來的集合。 print(a.union(b)) 執(zhí)行結(jié)果: {1, 2, 3, 4, 5, 6, 7, 8, 9} 將兩個(gè)集合合并
- 拿出集合a中存在的b中不存在的,如果需要值需要將執(zhí)行結(jié)果給一個(gè)變量它不會(huì)修改原來的集合(差集)。 print(a.difference(b)) 執(zhí)行結(jié)果: {8, 1, 2, 9, 7} 集合a中存在b中不存在
- 拿出集合a中存在的b中不存在的,并修改a集合(差集)。 a.difference_update(b) print(a) 執(zhí)行結(jié)果: {1, 2, 7, 8, 9} 拿出集合a中存在b中不存在的值,修改a集合
- 在a集合或b集合中,但不會(huì)同時(shí)出現(xiàn)在二者中(對稱差集),如果需要值需要將執(zhí)行結(jié)果給一個(gè)變量它不會(huì)修改原來的集合。。 print(a.symmetric_difference(b)) 執(zhí)行結(jié)果: {1, 2, 7, 8, 9} 在a或b集合中的元素,不會(huì)同時(shí)出現(xiàn)在另一個(gè)集合中的
-
在a集合或b集合中,但不會(huì)同時(shí)出現(xiàn)在二者中(對稱差集),直接修改a集合:
a.symmetric_difference_update(b) print(a) 執(zhí)行結(jié)果: {1, 2, 7, 8, 9} 對稱差集
-
-
三目運(yùn)算(三元運(yùn)算):?
-
介紹:
- 三目運(yùn)算就是是對簡單的條件語句的縮寫,讓之前需要3-4行的特殊代碼寫成一行:
- 使用方法: c=0 name='Wu' if c== 0 else 'Qi' #先做if判斷如果c等于0那么name的值就是Wu否則值為Qi print(name) 執(zhí)行結(jié)果: Wu
?
深淺拷貝:
-
數(shù)字和字符串
- 對于數(shù)字和字符串而言深淺拷貝、賦值,沒有是沒意義,因?yàn)樗麄內(nèi)绻嗤肋h(yuǎn)指向同一個(gè)內(nèi)存地址: a='hello'
b='hello'
c=1
d=1
print(id(a)) #id()查看變量的內(nèi)存地址
print(id(b))
print(id(c))
print(id(d)) 執(zhí)行結(jié)果: 1902418750296 1902418750296 1521807152 1521807152
- 對于數(shù)字和字符串而言深淺拷貝、賦值,沒有是沒意義,因?yàn)樗麄內(nèi)绻嗤肋h(yuǎn)指向同一個(gè)內(nèi)存地址: a='hello'
b='hello'
c=1
d=1
print(id(a)) #id()查看變量的內(nèi)存地址
-
其他基本數(shù)據(jù)類型的深淺拷貝賦值:
-
-
介紹:
- 賦值就是你創(chuàng)建了一個(gè)變量然后有值,又創(chuàng)建一個(gè)變量給的值指向的就是你之前創(chuàng)建的變量名。 n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n2 = n1 print(id(n1)) #查看n1字典在內(nèi)存的位置 print(id(n2)) #查看n2字典在內(nèi)存的位置 print(id(n1['k1'])) #查看n1字典中k1值的內(nèi)存位置 print(id(n2['k1'])) #查看n2字典中k1值的內(nèi)存位置 執(zhí)行結(jié)果: 1961536305736 1961536305736 1961536697040 1961536697040 賦值的拷貝分析
-
?
-
淺拷貝:
-
介紹:在內(nèi)存中只創(chuàng)建第一層數(shù)據(jù)結(jié)構(gòu):
-
分析:
import copy #拷貝模塊 n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n2 =copy.copy(n1) #淺拷貝n1 print(id(n1)) #輸出n1在內(nèi)存的位置 print(id(n2)) #輸出n2在內(nèi)存的位置 print(id(n1['k3'])) #輸出n1中列表在內(nèi)存的位置 print(id(n2['k3'])) #輸出n2中列表在內(nèi)存的位置 執(zhí)行結(jié)果: 2162448251464 2162448682888 2162450147144 2162450147144 淺拷貝分析
-
-
?
?
?
-
深拷貝:
-
介紹:
- 在內(nèi)存中將所有的數(shù)據(jù)重新創(chuàng)建一遍,除了字符串和數(shù)字使用的還是原來的內(nèi)存地址,因?yàn)镻ython對他們做了優(yōu)化。
-
深拷貝的分析:
import copy n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n2 = copy.deepcopy(n1) #深拷貝 print(id(n1)) #查看n1字典的內(nèi)存地址 print(id(n2)) #查看n2字典的內(nèi)存地址 print(id(n1['k3'])) #查看n1字典中的k3值的內(nèi)存地址 print(id(n2['k3'])) #查看n2字典中的k3值的內(nèi)存地址 print(id(n1['k1'])) #查看n1字典中的k1值的內(nèi)存地址 print(id(n2['k1'])) #查看n2字典中的k1值的內(nèi)存地址 執(zhí)行結(jié)果: 2398849710664 2398850108872 2398851605768 2398851575624 2188442383056 2188442383056 Python深拷貝分析
-
函數(shù):
-
背景:
-
在學(xué)習(xí)函數(shù)之前,我們一直遵循:面向過程編程,就是所謂的從上到下的執(zhí)行實(shí)現(xiàn)功能,有時(shí)候會(huì)有很多重復(fù)的代碼我們就需要復(fù)制粘貼,這樣就會(huì)導(dǎo)致我們的開發(fā)效率,而且容易出錯(cuò)。
-
函數(shù)的使用:假設(shè)我們有一個(gè)腳本在不斷的循環(huán)查看服務(wù)器的各個(gè)狀態(tài)是否正常如果不正常就會(huì)發(fā)送郵件但是郵件發(fā)送使用面向過程的大方會(huì)有很多重復(fù)的代碼既浪費(fèi)空間還浪費(fèi)時(shí)間。
while True:if cpu利用率 > 90%:#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接 if 硬盤使用空間 > 90%:#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接if 內(nèi)存占用 > 80%:#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接 面向過程的編寫方式 def 發(fā)送郵件(內(nèi)容)#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接while True:if cpu利用率 > 90%:發(fā)送郵件('CPU報(bào)警')if 硬盤使用空間 > 90%:發(fā)送郵件('硬盤報(bào)警')if 內(nèi)存占用 > 80%:發(fā)送郵件('內(nèi)存報(bào)警') 函數(shù)式編程的編寫方式可以看出來上面的兩種方法第二種要比第一種重用性和可讀性要好很多,這就是面向過程和函數(shù)式編程的區(qū)別
-
解釋:
- 函數(shù)式編程:將寫好的某些功能代碼封裝到函數(shù)中,以后便不需重復(fù)編寫,直接調(diào)用函數(shù)就可以。(函數(shù)式編程最重要的是增強(qiáng)代碼的重用性和可讀性)
- 面向?qū)ο?#xff1a;對函數(shù)進(jìn)行分類和封裝,讓開發(fā)者開發(fā)的效率“更快更好更強(qiáng)...”
- 面向過程:這個(gè)代碼從上到下的執(zhí)行。
-
-
定義和使用
-
函數(shù)結(jié)構(gòu):
def 函數(shù)名(參數(shù)): ...函數(shù)體...返回值 函數(shù)結(jié)構(gòu)
-
函數(shù)的定義主要有以下幾點(diǎn):
- def:表示函數(shù)的關(guān)鍵字。
- 函數(shù)名:函數(shù)的名稱,以后根據(jù)函數(shù)名調(diào)用函數(shù)。
- 函數(shù)體:函數(shù)中進(jìn)行一系列的邏輯計(jì)算。
- 參數(shù):為函數(shù)體提供數(shù)據(jù)
- 返回值:當(dāng)函數(shù)執(zhí)行完畢后,給調(diào)用者返回需要的數(shù)據(jù)。
-
-
返回值
-
解釋:
- 函數(shù)是一個(gè)功能塊,該功能到底執(zhí)行是否成功,需要通過返回值來告知調(diào)用者。
-
列如:
def test():a=0if a == 0 :return '成功'else:return '失敗' print(test()) 執(zhí)行結(jié)果: 成功 Python函數(shù)返回值的例子
-
-
參數(shù)
-
解釋:
- 參數(shù)可以更好、更準(zhǔn)確的去執(zhí)行處理,因?yàn)槿绻麤]有參數(shù)那么就相當(dāng)于函數(shù)被寫死了。
-
參數(shù)例子
- 如果沒有參數(shù)將會(huì)成為這樣,需要寫很多函數(shù),調(diào)用每一個(gè)不同的函數(shù),但是函數(shù)內(nèi)部就是改了一個(gè)內(nèi)容而已,這樣就和面向過程變成一樣了。 def CPU報(bào)警郵件()#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接def 硬盤報(bào)警郵件()#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接def 內(nèi)存報(bào)警郵件()#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接while True:if cpu利用率 > 90%:CPU報(bào)警郵件()if 硬盤使用空間 > 90%:硬盤報(bào)警郵件()if 內(nèi)存占用 > 80%:內(nèi)存報(bào)警郵件() 沒有參數(shù)的函數(shù)
- 加參數(shù)函數(shù),這樣我們的可讀性變得會(huì)很好,而且可以很好的操作。 def 發(fā)送郵件(郵件內(nèi)容)#發(fā)送郵件提醒連接郵箱服務(wù)器發(fā)送郵件關(guān)閉連接while True:if cpu利用率 > 90%:發(fā)送郵件("CPU報(bào)警了。")if 硬盤使用空間 > 90%:發(fā)送郵件("硬盤報(bào)警了。")if 內(nèi)存占用 > 80%:發(fā)送郵件("內(nèi)存報(bào)警了。") 加參數(shù)的函數(shù)
-
函數(shù)中三種不同的參數(shù)
- 普通參數(shù)就和我們上面說的一樣,但是他必須是有幾個(gè)形參就要有多少實(shí)參,形參就是函數(shù)名后面()里的參數(shù)個(gè)數(shù),實(shí)參就是調(diào)用函數(shù)時(shí)的()里寫的內(nèi)容。 def test(name): #參數(shù)name,(形參)return name print(test('Wu')) 執(zhí)行結(jié)果: print(test('Wu')) #執(zhí)行test函數(shù)傳參Wu。(實(shí)參) 執(zhí)行結(jié)果: Wu 普通參數(shù)
- 默認(rèn)參數(shù): def test(name='None'): #默認(rèn)參數(shù)必須在形參后面,也可以理解為寫到最后面才可以使用。return name print(test()) 執(zhí)行結(jié)果: None 默認(rèn)參數(shù)
- 動(dòng)態(tài)參數(shù)一: def test(*name):return name print(test(1,2,3,4,5,7)) #給test函數(shù)傳很多數(shù)字 執(zhí)行結(jié)果: (1, 2, 3, 4, 5, 7) #輸入結(jié)果為元組類型的。 Python動(dòng)態(tài)參數(shù)一
- 動(dòng)態(tài)參數(shù)二: def test(**name):return name print(test(name='Wu',age=20)) #給函數(shù)test傳實(shí)參,多個(gè)參數(shù),必須是**=**因?yàn)檫@種動(dòng)態(tài)參數(shù)會(huì)以字典的形式返回 執(zhí)行結(jié)果: {'name': 'Wu', 'age': 20} Python動(dòng)態(tài)參數(shù)二
- 動(dòng)態(tài)參數(shù)一和二可以同時(shí)使用: def test(*args,**kwargs):#python默認(rèn)提供的動(dòng)態(tài)參數(shù)名稱*args和**kwargsreturn args,kwargs print(test(123,123,234,name='Wu',age=20)) 執(zhí)行結(jié)果: ((123, 123, 234), {'age': 20, 'name': 'Wu'}) Python動(dòng)態(tài)參數(shù)同時(shí)使用兩個(gè)
-
-
-
- 向動(dòng)態(tài)參數(shù)傳元組需要加一個(gè)*,字典加兩個(gè)*。
-
-
練習(xí):
- 簡述普通參數(shù)、指定參數(shù)、默認(rèn)參數(shù)、動(dòng)態(tài)參數(shù)的區(qū)別。
- 寫函數(shù),計(jì)算傳入字符串中【數(shù)字】、【字母】、【空格] 以及 【其他】的個(gè)數(shù)
- 寫函數(shù),判斷用戶傳入的對象(字符串、列表、元組)長度是否大于5。
- 寫函數(shù),判斷用戶傳入的對象(字符串、列表、元組)長度是否大于5。
- 寫函數(shù),檢查傳入列表的長度,如果大于2,那么僅保留前兩個(gè)長度的內(nèi)容,并將新內(nèi)容返回給調(diào)用者。
- 寫函數(shù),檢查獲取傳入列表或元組對象的所有奇數(shù)位索引對應(yīng)的元素,并將其作為新列表返回給調(diào)用者。
- 寫函數(shù),檢查傳入字典的每一個(gè)value的長度,如果大于2,那么僅保留前兩個(gè)長度的內(nèi)容,并將新內(nèi)容返回給調(diào)用者。 dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
- 寫函數(shù),利用遞歸獲取斐波那契數(shù)列中的第 10 個(gè)數(shù),并將該值返回給調(diào)用者。 def func(arg1,arg2):if arg1 == 0:print arg1, arg2arg3 = arg1 + arg2print arg3func(arg2, arg3) func(0,1) 斐波那契
-
尋找差異
# 數(shù)據(jù)庫中原有old_dict = {"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 },"#2":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }}# cmdb 新匯報(bào)的數(shù)據(jù)new_dict = {"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 800 },"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }"#4":{ 'hostname':c2, 'cpu_count': 2, 'mem_capicity': 80 }} 選做提示是否刪除:?
提示是否新建:?
提示是否更新:?
注意:無需考慮內(nèi)部元素是否改變,只要原來存在,新匯報(bào)也存在,就是需要更新,憑自己想法去做。
練習(xí)解答在另一篇中出現(xiàn)?!
?
轉(zhuǎn)載于:https://www.cnblogs.com/WuYongQi/p/5468773.html
總結(jié)
以上是生活随笔為你收集整理的Python开发Day03的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生日蛋糕(DFS)
- 下一篇: html body div height