Python基础学习3
6 模塊和包
(1)????命名以.py結尾的文件就是Python模塊
Python的包就是一個文件夾,至少有還有一個__init__.py的文件
包中可以有文件夾,文件夾中可以有包
(2)????文件的導入
每使用一個變量名或者函數時,就需要導入另一個文件
例:從mian.py中導入lib文件下的一個函數,現在想從mian.py中使用do_parse函數
在編譯器下通過運行python main.py從而運行main.py,和main.py在同一個目錄下面的其他包可以被導入使用,現在要導入lib中的do_parse函數,需要在mian.py的源代碼中寫 from lib.parse import do_parse(parse是lib包下面的一個.py文件,do_parse是該文件下的一個函數)
第三方包的導入
如果lib不在同一個目錄下,Python可能找不到,可以使用from .xxx(用.表示當前模塊下的,另外還有..就是當前模塊的上一目錄下)
如果第一次導入的時候,會執行剛剛的代碼,但是如果第二次導入的時候,就不會第二次執行了
(3)????Python2的特有導入
如果是同包的目錄下,就不用使用.號,但是不建議使用
(4)????使用小技巧
dir(模塊):查看模塊屬性
如:在Linux下進入Python,執行(sys是一個系統包)(可以把sys暫時理解為一個對象):import sys->dir(sys)下面會彈出一系列的變量名,此時可是執行:type(sys.version)查看version的屬性這里顯示的是str,意思是version是str類型的。如果執行type(sys.getsizeof),此時顯示的getsizeof是一個函數,如下圖
技巧2
每個內置的模塊都有一個內置的變量,以雙下劃線開頭,雙下劃線結尾的__name__,不用定義可以直接使用,一般是一個str類型,即每一個.py下都有一個內置變量,如果是入口模塊的話(模塊就是一個.py文件),它的內置變量就固定為__main__,如果使用if __name__==”__main__”就可以判斷這個模塊是否為入口模塊
7 高級數據結構
(1)????元組
與列表很相似,定義時把中括號改成小括號,只不過元組的內容不可變,可以理解為常量,注意(2)不是元組,而應該使用(2,),這個是只有一個元素的元組的寫法
(2)????字典
想要表示映射的關系
用{}括起來,如
{
“123”:123
456:”hello”
}
注意冒號左邊是常量,叫做鍵,冒號右邊是常量或者變量,叫做值,可以講上式寫成一行a={“123”:123,456:”hello”}。如果我們想使用字典里面的值,則使用a[“123”],字典取值,得到了123.如果想要改變字典中的值的話,則使用a[“123”]=”world”,字典設置值。特性是速度非常快
(3)????字符串
字符串可以理解為一個特殊的列表,列表中的每個元素就是一個字符,字符串也是一個常量,我們無法修改其值。字符串可以截獲使用,如a=”hello world”,可以使用a[:5]獲取前五個值的這樣的一個新的字符串進行使用。
字符串的占位符替換
如a=”hello %s” % “world”:這樣的話,就把%s替換成world。如果要替換多個值可以使用如下的方式a=”%s %s” % {“hello” “world”}(列表的形式進行替換)。關鍵字替換:a=”%(a)s%(b)s” % {a:”hello”,b:”world”}(字典形式進行替換)。
(4)????函數中使用元組和字典
當函數返回多個值時,實際上返回的就是一個元組。把一個元組賦值給其他變量時,就是一個拆包的過程。如果我們定義了一個相加的函數add(),此時可以使用元組進行傳參,使用方法如下:定義元組nums=(1,2)
使用函數和元組add(*nums),實際上就是把nums替換成了1,2
使用字典和函數
param={“a”:1,”b”:2}
param(**param)->param(a=1,b=2)
8 類和對象
出來模塊和函數的形式外,在我們構建大型項目的時候,我們學會使用類和對象的形式
(1)????創建類
class cat(object):
leg_cnt=4??????? #類屬性
def __init__(self,cat_name):??????#init的名字固定,整條語句不可變,固定是實例的創建過程,self固定格式,不可變,self就是一個實例化的對象
??? self.name=cat_name???????? #name是附屬于self實例的一個變量,使用的方式就是這種形式
def change_name(self,cat_name):??##一個參數一定是self,第一個參數可變,課不用,看自己的需求,這樣的一個函數就是一個方法
(2)????使用類(類的實例化)
使用tom=Cat(“Tom”):進行實例化,,此時tom是一個對象
方法的調用:tom.change_name(“xiaohei”)
對象的固有屬性:就是在定義類的時候,已經說明leg_cnt=4,所以tom中已經存在leg_cnt=4
(3)????類的繼承
class MyCat(Cat):??????????????????????? ?#讓貓實例化
def __init__(self,cat_name):??????????
??? surper(Mycat,self),__init__name????
def jump(self)
??? printf(“try jump”)
???? jack=MyCat(“jack”)
???? jack.jump()
???? jack.climb()
9 文件處理
(1)????寫入文件
比如我在某一文件夾下面創建了一個新的文件pome.txt,并在該文件里面寫入了內容,可以使用f=open(‘\\\’,’w’)??? #\\\是文件路徑,而w(寫入)是打開的屬性,還有r(讀取),a(追加)
接著使用f.write(pome)文件的一個寫入方法,然后使用f.colse()進行文件的關閉
(2)讀取文件
f.open(‘文件的路徑’)
? while Ture
???? line=f.readline()???? #讀取一行內容
???? if len(line) == 0:
???????? break
???? printf(line,end=””)?? #替換了內置的換行符,因為printf()的后面會內置一個換行符
? f.close()?#關閉文件
? (3)with語句
?? with open(‘\\\’,’w’) as f:
?????? f.write
? 因為加了一個with語句,當with結束時,會自動關閉文件
10 異常處理
(1)????將異常包裝成一個對象,這些對象有一個基類Exception
捕獲異常對象一
try:
? ….?? #可能會出現異常的錯誤代碼
except (一個錯誤類名稱內置的) ase:
printf(e)???? #處理這個異常
except Exception(這個是異常的基類):
?? #處理異常代碼,如打印
else:
??? #沒有異常的情況的代碼
?
捕獲異常2
try :
一段可能出錯的代碼
finally:
??? #最后一定會執行這個語句
?
另外還可以raisee?? #就是拋出異常
實例演示:在Linux下使用vim創建一個a.py的文件,然后輸入如下代碼
保存退出后,執行pythona.py 會顯示拋出異常
如果想繼續拋出異常,就可是使用如下
此時執行,又會拋出異常的處理
?
總結
以上是生活随笔為你收集整理的Python基础学习3的全部內容,希望文章能夠幫你解決所遇到的問題。