日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

B站莫烦Python基础学习笔记

發(fā)布時(shí)間:2023/12/20 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 B站莫烦Python基础学习笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

定義函數(shù)

def function(a,b): 函數(shù)名function,參數(shù)a和b
注意縮進(jìn)

函數(shù)默認(rèn)參數(shù)

  • 一般使用情況:
def function(x,y,z):print(x+y+z)function(100,200,300) # 600
  • 默認(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將每句話輸出:

for i in content:print(i)

一行一行讀取

使用readline()方法,對(duì)同一個(gè)文件:第一次使用時(shí)讀取第一行,第二次使用時(shí)讀取第二行。
讀取的類型是str

file=open('my file.txt','r') #read讀取文件到file content1=file.readline() #把file的第一行,以字符串類型賦值給content1 content2=file.readline() #把file的第二行,以字符串類型賦值給content2 print(content1) print(content2) print(type(content1))

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ǔ)法
import time print(time.localtime())
  • 類似宏定義簡(jiǎn)化模塊名
import time as t print(t.localtime())
  • 只使用模塊的少數(shù)功能(不用前綴time)
from time import time,localtime #從time模塊引入time和localtime兩個(gè)功能 print(time()) #不需要寫time.time print(localtime()) #不需要寫time.localtime
  • 使用模塊的所有功能(不用前綴time)
from time import * print(localtime()) print(gmtime()) print(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ò):

try:file=open('asdasd','r') except Exception as e: #Exception類型的報(bào)錯(cuò),存進(jìn)eprint(e)

捕獲報(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。