B站莫烦Python基础学习笔记
定義函數(shù)
def function(a,b): 函數(shù)名function,參數(shù)a和b
注意縮進(jìn)
函數(shù)默認(rèn)參數(shù)
- 一般使用情況:
- 默認(rèn)參數(shù):
這時(shí)將x,y,z都設(shè)置默認(rèn)參數(shù):字符串1,2,3。 當(dāng)然,如果不想使用默認(rèn)參數(shù),函數(shù)調(diào)用時(shí)重新賦值即可
def function(x='1',y='2',z='3'):print(x+y+z)function() #123 function('2','3','4') #234- 注意:
如果未提前定義的參數(shù)在已提前定義的參數(shù)后面,則會(huì)報(bào)錯(cuò):
紅色的定義是提前默認(rèn)的參數(shù),y是沒(méi)有提前定義的參數(shù)
所以會(huì)報(bào)錯(cuò):非默認(rèn)參數(shù)緊跟在默認(rèn)參數(shù)之后(non-default argument follows default argument)
想要默認(rèn)定義的參數(shù)都放在后面
定義全局變量
global a : 定義一個(gè)全局變量a,但是不能直接global a=111
而是要
a=None def fun ():global aa=111print('past a :',a) fun() #經(jīng)過(guò)函數(shù)內(nèi)部賦值 print('new a :',a)看似是在函數(shù)里面定義一個(gè)全局變量,其實(shí)是對(duì)函數(shù)里面的變量進(jìn)行全局化(因?yàn)榧词箖?nèi)部聲明了a,仍需要在全局先聲明)才能在外部使用。
安裝外部模塊
cmd中輸入pip install numpy
或者
pycharm中設(shè)置->Python解釋器->添加第三方庫(kù)
文件的讀寫
使用open( )函數(shù):具體參數(shù)意義可見(jiàn): https://www.runoob.com/python/python-func-open.html
創(chuàng)建文件
text='this is my first file\nthis is next line' my_file=open('my file.txt','w') #起名my file,僅寫入 my_file.write(text) #把上面的text寫入文件 my_file.close() #關(guān)閉文件在我們存py文件的路徑下便有了
修改(追加)文件
append_text='\nappend contain' my_file=open('my file.txt','a') #append追加 my_file.write(append_text) my_file.close()讀取文件
file=open('my file.txt','r') #read讀取文件到file content=file.read() #對(duì)file讀取,賦給content print(content)讀取每一行存為list
file=open('my file.txt','r') #read讀取文件到file content=file.readlines() #用readlines()方法,把file的每一行放進(jìn)列表list print(content)把每一行存進(jìn)list
當(dāng)然,既然在list里面,那我們就可以用for-in將每句話輸出:
一行一行讀取
使用readline()方法,對(duì)同一個(gè)文件:第一次使用時(shí)讀取第一行,第二次使用時(shí)讀取第二行。
且讀取的類型是str
class類
class Abc: 聲明一個(gè)名為Abc的類(命名的首字母通常是大寫)
self是指向class實(shí)例的this指針,可以用來(lái)調(diào)用類的屬性或者方法。若類的內(nèi)部要相互調(diào)用的話,也用self定位到class。
class Caculator:name='fly bird' #Caculator類的一個(gè)屬性,計(jì)算器的名稱price=18 #計(jì)算器的價(jià)格def add(self,x,y): #參數(shù)self,是指向Caculator的指針,可以調(diào)用Caculator的方法或?qū)傩詒esult=x+yprint(result)def minus(self,x,y): #如果類的內(nèi)部要相互調(diào)用的話,用self定位到classresult=x-yprint(result)def times(self,x,y):result=x*yprint(result)def divide(self,x,y):result=x/yprint(result)cal=Caculator() #用對(duì)象cal獲得Caculator這個(gè)類 print(cal.name) cal.add(10,11)init功能
初始化類的屬性,例如本例中Caculator固有的name和price是fly bird和18。
方法中有init()函數(shù)(這是class自帶的),則可以在調(diào)用時(shí)再次賦值,改變調(diào)用時(shí)c的屬性。當(dāng)然,這不改變?cè)瓉?lái)Caculator的屬性。而且,還可以在 init( ) 中初始化函數(shù),做到:一調(diào)用這個(gè)class就執(zhí)行某個(gè)函數(shù)
init()函數(shù)中,用參數(shù)newname,賦值給Caculator的name:self.name=newname。
class Caculator:name='fly bird' #Caculator類的一個(gè)屬性,計(jì)算器的名稱price=18 #計(jì)算器的價(jià)格def __init__(self,newname,newprice):self.name=newnameself.price=newpriceself.add(1,2) #也可以在init中調(diào)用函數(shù)def add(self,x,y): #參數(shù)self,是指向Caculator的指針,可以調(diào)用Caculator的方法或?qū)傩詒esult=x+yprint(result)def minus(self,x,y): #如果類的內(nèi)部要相互調(diào)用的話,用self定位到classresult=x-yprint(result)print(Caculator.name) #fly bird c=Caculator('fish',22) #調(diào)用時(shí)初始化 print(c.name) #fish print(c.price) #22 print(Caculator.price) #18 ,原Caculator仍是固有的也可以用默認(rèn)賦值def __init__(self,newname,newprice=29):這樣每次調(diào)用的時(shí)都自動(dòng)重新賦上默認(rèn)值price=29。
即:C.price 為 29,Caculator.price 為 18。
import 載入模塊
- 用最基本語(yǔ)法
- 類似宏定義簡(jiǎn)化模塊名
- 只使用模塊的少數(shù)功能(不用前綴time)
- 使用模塊的所有功能(不用前綴time)
自定義模塊
不同的函數(shù)在不同文件中,在Python文件之間的相互調(diào)用。前提是兩個(gè)文件在同一個(gè)目錄下(同一個(gè)文件夾里)
被調(diào)用文件formula.py中:
def function():print('ss')調(diào)用文件Python.py中:
import formulaformula.function()
也可以把自己做好的模塊放在電腦中存放所有外部模塊的目錄下,這樣就不用把被調(diào)用模塊和調(diào)用模塊放在一個(gè)文件夾,就可以隨時(shí)調(diào)用了。
用try-except捕捉報(bào)錯(cuò)
使本來(lái)報(bào)錯(cuò)的程序不中斷報(bào)錯(cuò),而是用變量捕捉到,然后可以把報(bào)錯(cuò)輸出查看。
例如:打開(kāi)一個(gè)不存在的文件
file=open('asdasd','r')會(huì)報(bào)錯(cuò):
捕獲報(bào)錯(cuò):
捕獲報(bào)錯(cuò)且代碼編譯不報(bào)錯(cuò):
至于except為什么選擇Exception?這只是一個(gè)類型,同樣還有很多別的錯(cuò)誤類型 。
更多參數(shù)可以看這個(gè): https://www.runoob.com/python/python-exceptions.html
一個(gè)處理報(bào)錯(cuò)例子
在文件中查找名為“asdasd.txt”的文件,若沒(méi)有找到則詢問(wèn)是否新建,若找到則在文件中添加一句話:i am coming
try:file=open('asdasd.txt','r+') #只讀+寫入方式 except Exception as e:print('there is no file named asdasd')respone=input('do you want to creat a new file?')if respone=='y':file=open('asdasd.txt','w')else:pass else: #此else對(duì)應(yīng)上面exceptfile.write('i am coming')file.close()若報(bào)錯(cuò),則輸出:there is no file named asdasd。并詢問(wèn)是否要新建,若輸入y,則open名為asdasd的新文件。
若沒(méi)有報(bào)錯(cuò)(找到asdasd文件),則給文件寫入:i am coming,最后關(guān)上文件。
zip,lambda,map
zip 合并列表
zip英文是拉鏈,即把多個(gè)列表合并起來(lái),形成元組
a=[1,2,3] b=[2,3,4] s=list(zip(a,b)) #如果不轉(zhuǎn)換為list則只能獲得object print(s) #[(1, 2), (2, 3), (3, 4)]每個(gè)列表有三個(gè)元素,所以最終zip出了三個(gè)元組
若要輸出:
for i,j in s: #i和j自動(dòng)獲取s每個(gè)元組中的第一個(gè),第二個(gè)值print(i*2,j*3)lambda 定義簡(jiǎn)單函數(shù)
相對(duì)def一個(gè)函數(shù),lambda定義簡(jiǎn)單函數(shù)更為方便,只需寫出參數(shù)和算式即可。
def fun1(x,y):print(x+y) fun1(2,3)fun2=lambda x,y:x+y #不用括號(hào)包住參數(shù),直接寫運(yùn)算,自動(dòng)return print(fun2(2,3))用map包裝函數(shù)及參數(shù)
list(map(fun1,[1,3],[2,5])) 即包裹函數(shù)fun1且,第一個(gè)方括號(hào)內(nèi)是參數(shù)x的值,第二個(gè)是y的值。最后使用list轉(zhuǎn)換,使輸出為列表形式
def fun1(x,y):print(x+y)list(map(fun1,[1,2],[3,5]))輸出:4和7 分別是1+3 和 2+5
但是其輸出機(jī)制我還沒(méi)有搞清楚:不轉(zhuǎn)換list時(shí)候輸出為object,轉(zhuǎn)換后自動(dòng)print并換行輸出結(jié)果
淺復(fù)制copy和深復(fù)制deepcopy
在復(fù)制出克隆體之前,若a=c,則兩個(gè)變量的id相同,改變a的任意值,c的值也會(huì)變化。
淺復(fù)制
import copy庫(kù),然后用c=copy.copy(a),將a拷貝到克隆體c上,就可以做到修改c不影響a。
import copy a=[11,22,33] c=a print(id(a)) #2345350338368 print(id(c)) #2345350338368 c=copy.copy(a) print(id(c)) #2345349923968 地址發(fā)生變化 c[1]=9999 print(a) #[11, 22, 33] a不變 print(c) #[11, 9999, 33] 僅修改c中的22為9999淺復(fù)制的缺點(diǎn)
b=[11,22,[33,44]] d=copy.copy(b) #使用淺copy print(d) print(id(b)==id(d)) #d和d的id不同 d[0]=0 #修改d[0]的值 print(d) #[0, 22, [33, 44]] print(b) #[11, 22, [33, 44]] b不發(fā)生修改 d[2][1]=999 print(d) #[0, 22, [33, 999]] print(b) #[0, 22, [33, 999]] b也發(fā)生了修改淺拷貝只能做到拷貝父對(duì)象指針(指向b和d)
而子對(duì)象指針(指向b[2]列表)沒(méi)有被復(fù)制,所以修改d[2][1]也會(huì)影響b內(nèi)的值
深復(fù)制deepcopy
完全賦值整個(gè)對(duì)象,任何部分都不會(huì)發(fā)生使用共用內(nèi)存的情況。
語(yǔ)句:d=copy.deepcopy(b)
簡(jiǎn)單引用
c=a就是兩者共用同一存儲(chǔ),id相同,修改一個(gè)另一個(gè)也跟著修改。
總結(jié)
以上是生活随笔為你收集整理的B站莫烦Python基础学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2011年值得注意的5个设计趋势
- 下一篇: 莫烦python进化算法_使用遗传算法解