




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
python類和模塊楊志峰環(huán)境:Anacondapython3.6開發(fā)工具:pycharm類一、數(shù)據(jù)類型二、層次結(jié)構(gòu)三、設(shè)計(jì)模式四、模塊一、數(shù)據(jù)類型內(nèi)置數(shù)據(jù)類型類型名實(shí)例(instance)方法(method)整型inta=1ora=int(1)四則運(yùn)算等浮點(diǎn)型floatb=0.5orb=float(0.5)四則運(yùn)算等字符串型strc=‘Hello’orc=str(‘Hello’)字符串截取等列表listd=[]ord=list()添加、刪除元素等字典dicte={}ore=dict()添加、刪除元素等一、數(shù)據(jù)類型例1,list這個(gè)類型。(data_type.py)創(chuàng)建一個(gè)list實(shí)例,data=[1,2,3]。加入一個(gè)元素,data.append(1)。刪除這個(gè)實(shí)例,deldata或者程序運(yùn)行結(jié)束時(shí)自動(dòng)銷毀這個(gè)實(shí)例。del用在想節(jié)省內(nèi)存的時(shí)候。
‘.’運(yùn)算符的用法:①.前面是一個(gè)實(shí)例(或類型),后面是屬于這個(gè)類型的方法。②.訪問模塊中的包。一、數(shù)據(jù)類型對(duì)于一個(gè)數(shù)據(jù)類型知道的不知道的1.類型名2.怎樣創(chuàng)建和刪除一個(gè)實(shí)例3.與這個(gè)數(shù)據(jù)類型有關(guān)的方法1.類型中,數(shù)據(jù)的內(nèi)部表示2.屬于類的方法的具體細(xì)節(jié)一、數(shù)據(jù)類型體現(xiàn)了封裝的思想,數(shù)據(jù)類型給外界暴露方法,隱藏內(nèi)部細(xì)節(jié)。對(duì)于特定問題,內(nèi)置數(shù)據(jù)類型可能不夠用或者用起來很麻煩。我們可以自定義數(shù)據(jù)類型,將數(shù)據(jù)和作用于它們上的方法綁定在一起,構(gòu)造一個(gè)新數(shù)據(jù)類型。一、數(shù)據(jù)類型
一、數(shù)據(jù)類型1classCoordinate(object):2"""3
二維平面坐標(biāo)類。45可以求坐標(biāo)距離,比較坐標(biāo)大小。6
"""class用來定義類的關(guān)鍵字Coordinate是類名,類名以大寫字母開頭括號(hào)內(nèi)的object表示該類繼承object類:表示類的定義結(jié)束“”“…”“”表示注釋,寫類的內(nèi)部數(shù)據(jù),行為等空四個(gè)空格,表示下面是類的內(nèi)容一、數(shù)據(jù)類型綁定數(shù)據(jù)1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None__init__()是個(gè)特殊方法,用來定義怎樣創(chuàng)建類的實(shí)例。所有類都必須實(shí)現(xiàn)或者繼承這個(gè)方法。注意是雙下劃線。一般稱為構(gòu)造函數(shù)。用一些高級(jí)技巧可以繞過__init__()來創(chuàng)建對(duì)象,詳見pythoncookbook一、數(shù)據(jù)類型綁定數(shù)據(jù)1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None第一個(gè)參數(shù)self指這個(gè)類的一個(gè)實(shí)例。表示這個(gè)方法屬于這個(gè)類的一個(gè)實(shí)例。一、數(shù)據(jù)類型綁定數(shù)據(jù)1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None第一個(gè)參數(shù)后面的參數(shù),這里是x和y,可以將它們綁定在內(nèi)部數(shù)據(jù)上。形如(self.*)的數(shù)據(jù)稱為實(shí)例變量,屬于實(shí)例。一、數(shù)據(jù)類型綁定數(shù)據(jù)1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None所有的實(shí)例變量都應(yīng)在構(gòu)造函數(shù)內(nèi)賦值(初始化)。前兩句綁定傳入的數(shù)據(jù)。由于沒有傳入與name有關(guān)的數(shù)據(jù),將name賦值為None。一、數(shù)據(jù)類型創(chuàng)建實(shí)例1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None67data1=Coordinate(1,2)
8data2=Coordinate(-1,-1)用類名(不包含self的其他參數(shù))創(chuàng)建實(shí)例。一、數(shù)據(jù)類型直接訪問和修改內(nèi)部數(shù)據(jù)1data1=Coordinate(1,2)
2data2=Coordinate(-1,-1)3
4print(data1.x)
#訪問數(shù)據(jù)5data1.x=10#修改數(shù)據(jù)’.’運(yùn)算符訪問實(shí)例中的實(shí)例變量。按照規(guī)范,避免用’.’運(yùn)算符直接訪問和修改數(shù)據(jù)。為了簡單,可不遵守這個(gè)規(guī)范。動(dòng)態(tài)綁定一個(gè)實(shí)例變量1data1.z=3
為了靈活性,python支持這種做法,很少用到。會(huì)造成data1和data2中實(shí)例變量不同。一、數(shù)據(jù)類型間接訪問和修改內(nèi)部數(shù)據(jù)1classCoordinate(object):
2defget_x(self):
3
returnself.x4defset_x(self,x):
5
self.x=x67data1.get_x()#訪問數(shù)據(jù)
Coordinate.get_x(data1)#另一種方式8data1.set_x(10)#修改數(shù)據(jù)Coordinate.set_y(data1,10)#另一種方式引入getter和setter方法。getter用于訪問數(shù)據(jù),setter用于修改數(shù)據(jù)。一、數(shù)據(jù)類型變量名前面加兩個(gè)下劃線,希望不被外界訪問。如果加一個(gè)下劃線,建議輕易不被外界訪問。對(duì)于方法來說也一樣。隱藏內(nèi)部數(shù)據(jù)表示,實(shí)現(xiàn)訪問控制。隱藏內(nèi)部表示1classCoordinate(object):2def__init__(self,x,y):
3
self.__x=x
4
self._y=y
5
self.name=None67data1=Coordinate(1,2)
8data2=Coordinate(-1,-1)9print(data1.__x)
!出錯(cuò)10print(data1._Coordinate__x)#正確11print(data1._y)#正確python自動(dòng)給加雙下劃線的變量或函數(shù),前面補(bǔ)上_類名一、數(shù)據(jù)類型計(jì)算兩個(gè)坐標(biāo)的歐式距離1classCoordinate(object):2
defdistance(self,other):
3
x_diff_sq=(self.x-other.x)**2
4
y_diff_sq=(self.y-other.y)**2
5
return(x_diff_sq+y_diff_sq)**0.567data1=Coordinate(1,2)
8data2=Coordinate(-1,-1)910length=data1.distance(data2)length=Coordinate.distance(data1,data2)#另一種方式
11print(length)傳入另一個(gè)Coordinate實(shí)例,計(jì)算兩個(gè)坐標(biāo)的歐式距離兩個(gè)坐標(biāo)相加整型這樣的基本數(shù)據(jù)類型可用’+’,但在坐標(biāo)類上’+’沒有定義,需要自定義坐標(biāo)類上的’+’運(yùn)算。用重載(overload)擴(kuò)展’+’的支持的參數(shù)類型,使它支持坐標(biāo)類型相加。運(yùn)算符/操作內(nèi)置函數(shù)重載后運(yùn)算+__add__(self,other)self+other-__sub__(self,other)self-other==__eq__(self,other)self==other<__lt__(self,other)self<otherlen()__len__(self)len(self)print()__str__(self)print(self)迭代操作__iter__(self)或__getitem__(self,item)foreinlist:一、數(shù)據(jù)類型兩個(gè)坐標(biāo)相加1classCoordinate(object):2def__add__(self,other):
3
new_x=self.x+other.x
4
new_y=self.y+other.y
5
returnCoordinate(new_x,new_y)67data1=Coordinate(1,2)
8data2=Coordinate(-1,-1)9data3=data1+data2#即(0,1)data3=Coordinate.__add__(data1,data2)#另一種方式由于重載了’+’運(yùn)算符,可以直接加兩個(gè)坐標(biāo)實(shí)例。執(zhí)行’+’操作時(shí),判斷前面那個(gè)變量是Coordinate類的實(shí)例,因此調(diào)用Coordinate類的__add__(self,other)方法。一、數(shù)據(jù)類型輸出實(shí)例1classCoordinate(object):2def__str__(self):
3
return'('+str(self.x)+','+str(self.y)+')'45data1=Coordinate(1,2)6print(data1)#輸出(1,2)print(Coordinate.__str__(data3))#另一種方式由于重寫了類的字符串化函數(shù),print()發(fā)現(xiàn)參數(shù)是Coordinate實(shí)例,調(diào)用Coordinate類中的__str__(self)方法。一、數(shù)據(jù)類型特殊的數(shù)據(jù)—類變量1classCoordinate(object):2
record=13def__init__(self,x,y):
4
self.x=x
5
self.y=y
6
self.name=None
7
self.id=Coordinate.record
8
Coordinate.record+=1910data1=Coordinate(1,2)
11Coordinate.record=212data1.record=313print(Coordinate.record)#輸出2動(dòng)態(tài)綁定實(shí)例變量,不影響類變量。類變量是所有實(shí)例共享的變量,是公共的數(shù)據(jù)。一、數(shù)據(jù)類型特殊的數(shù)據(jù)—類變量1classCoordinate(object):2
record=13def__init__(self,x,y):
4
self.x=x
5
self.y=y
6
self.name=None
7
self.id=Coordinate.record
8
Coordinate.record+=1910data1=Coordinate(1,2)
11data2=Coordinate(-1,-1)
12print(data1.id)#輸出1
13print(data2.id)#輸出2用來計(jì)數(shù),每創(chuàng)建一個(gè)實(shí)例,類變量加1。一、數(shù)據(jù)類型特殊的數(shù)據(jù)—類變量1classCoordinate(object):2
record=13def__init__(self,x,y):
4
self.x=x
5
self.y=y
6
self.name=None
7
self.id=Coordinate.record
8
Coordinate.record+=1910Coordinate.new_var=1
動(dòng)態(tài)綁定類變量,很少用到。一、數(shù)據(jù)類型實(shí)例變量類變量①.在__init__()中定義②.每個(gè)實(shí)例特有③.只有它所屬的實(shí)例可以訪問、修改它④.在類內(nèi)部,用self.變量名訪問、修改它。在類外部,用實(shí)例名.變量名訪問、修改它①.在類中定義,不在方法中定義②.屬于類,類的所有實(shí)例所共有③.任何實(shí)例都可以訪問、修改它④.無論在類的內(nèi)部還是外部,建議用類名.變量名訪問、修改它實(shí)例變量和類變量的比較類方法1
@classmethod
2
defcreate(cls,*args):
3
iflen(args)==2:
4
returncls(args[0],args[1])
5
iflen(args)==1:
6result=re.findall('\d+',args[0])
7
iflen(result)==2:
8
returncls(int(result[0]),int(result[1]))
9
else:
10
print('坐標(biāo)格式錯(cuò)誤')1112data4=Coordinate.create(3,4)#創(chuàng)建一個(gè)(3,4)坐標(biāo)實(shí)例
13
data5=Coordinate.create('4,5')#創(chuàng)建一個(gè)(4,5)坐標(biāo)實(shí)例
14
data6=Coordinate.create('5/6')
#創(chuàng)建一個(gè)(5,6)坐標(biāo)實(shí)例@classmethod是個(gè)裝飾器,表示下面是一個(gè)類方法。第一個(gè)參數(shù)cls指這個(gè)類。表示這個(gè)方法屬于這個(gè)類??梢詳U(kuò)展__init__函數(shù)支持的參數(shù)。裝飾器一般用函數(shù)式編程得到,思路是一個(gè)函數(shù)的參數(shù)是另一個(gè)函數(shù),很少用到。靜態(tài)方法1importcsv
2importos
3
4classSomeOper:
5
@staticmethod
6
defread_file(filename):
7
ifos.path.exists(filename):
8content=[]
9file=open(filename,encoding=‘utf-8’)
10csv_reader=csv.reader(file)
11
forrowincsv_reader:
12[content.append(int(x))forxinrow]
13
returncontent
14SomeOper.read_file(‘test.csv’)#得到csv文件的list實(shí)例參數(shù)和類、實(shí)例都沒有關(guān)系。在普通函數(shù)前面有個(gè)類名,用類組織普通函數(shù)。一、數(shù)據(jù)類型當(dāng)任務(wù)很復(fù)雜時(shí),可以拆分為幾個(gè)簡單的任務(wù),每個(gè)簡單任務(wù)對(duì)應(yīng)一個(gè)類,這時(shí)需要用多個(gè)類。分成了多個(gè)類,團(tuán)隊(duì)合作的時(shí)候,可以每個(gè)人負(fù)責(zé)一個(gè)類,最后把它們組合起來。在一個(gè)類中放入另一個(gè)類,構(gòu)成類的組合。有兩種常用的方法:①.構(gòu)造注入②.設(shè)值注入一、數(shù)據(jù)類型例3:有一個(gè)內(nèi)容是一些整數(shù)的csv文件,需要把文件中的所有數(shù)加起來。定義一個(gè)文件操作類FileOperator,用來讀csv文件。另一個(gè)管理類Manager,用來求和,把文件操作類放入管理類。(csv_sum.py)一、數(shù)據(jù)類型①.構(gòu)造注入,構(gòu)造時(shí)放入另一類的實(shí)例。1classManager:2def__init__(self,file_operator):
3
self.file_operator=file_operator1classFileOperator:…1fileOp=FileOperator()#創(chuàng)建一個(gè)FileOperator類的實(shí)例
2manager=Manager(fileOp)#創(chuàng)建一個(gè)Manager類的實(shí)例
3sum=pute('test.csv')#傳入csv文件名
4print(sum)#輸出計(jì)算結(jié)果一、數(shù)據(jù)類型②.設(shè)值注入,用setter函數(shù)放入另一類的實(shí)例。1classManager:
2
def__init__(self):
3
self.file_operator=None
4
5defset_file_operator(self,file_operator):
6
self.file_operator=file_operator1classFileOperator:…1fileOp=FileOperator()#創(chuàng)建一個(gè)FileOperator類的實(shí)例
2manager=Manager()#創(chuàng)建一個(gè)Manager類的實(shí)例
3manager.set_file_operator(fileOp)#通過setter函數(shù)注入實(shí)例
4sum=pute('test.csv')#傳入csv文件名
5print(sum)#輸出計(jì)算結(jié)果一、數(shù)據(jù)類型組合的好處1defcompute(self,filename):
1content=self.file_operator.read_csv(filename)
1sum_content=0
1
fornumincontent:
1sum_content+=num
1
returnsum_content1sum=pute('test.csv')#傳入csv文件名二、層次結(jié)構(gòu)例4:一些生命體的行為,貓、狗、學(xué)生和工人。(life.py)具體的行為和數(shù)據(jù)見下頁。LifeCatDogPersonStudentWorker更加抽象對(duì)于一個(gè)類,向上找,在樹的路徑上的統(tǒng)稱為父類,習(xí)慣上父類指上一層與它直接相連的那個(gè)類;向下找,在樹的路徑上的統(tǒng)稱為子類,習(xí)慣上子類指下一層與它直接相連的那個(gè)類。共同數(shù)據(jù):名字和年齡共同行為:說話特有行為:寫作業(yè)特有行為:上班特有數(shù)據(jù):性別二、層次結(jié)構(gòu)
二、層次結(jié)構(gòu)1classLife(object):
2
def__init__(self,name,age):
3
self.name=name
4
self.age=age
56
defspeak(self):
7
print("你好")89life=Life('li',20)
10life.speak()#輸出:你好生命類,包括名字和年齡兩個(gè)實(shí)例變量、一個(gè)說話方法。二、層次結(jié)構(gòu)1classCat(Life):
2
pass34cat1=Cat('c1',4)
5cat1.speak()輸出:你好1classDog(Life):
2
defspeak(self):
3
print("你好,我是一只狗")45dog1=Dog('d1',5)
6dog1.speak()輸出:你好,我是一只狗子類默認(rèn)繼承父類的方法和數(shù)據(jù)。子類實(shí)現(xiàn)父類的同名方法,而且參數(shù)相同(避免參數(shù)不同),稱為重寫(override)。通過這種方式定義子類的特有行為。二、層次結(jié)構(gòu)1classCat(Life):
2
pass34life=Cat('c1',4)
5life.speak()輸出:你好1classDog(Life):
2
defspeak(self):
3
print("你好,我是一只狗")45life=Dog('d1',5)
6life.speak()輸出:你好,我是一只狗life是屬于Life的子類實(shí)例。因?yàn)長ife這個(gè)父類有speak()方法,那么子類也有speak()方法。由于子類重寫了父類的speak()方法,那么子類和父類的speak()方法行為不同。根據(jù)life屬于的子類類型,決定speak()方法的行為。二、層次結(jié)構(gòu)子類中的方法調(diào)用順序:實(shí)例調(diào)用一個(gè)方法時(shí),先從自身所屬的類中找,如果找不到,從父類中找,如果還找不到,從父類的父類中找,依次找下去。執(zhí)行找到的第一個(gè)方法。如果一直到object仍然找不到這個(gè)方法,發(fā)生錯(cuò)誤。重寫的好處:子類能夠根據(jù)需要實(shí)現(xiàn)父類的方法,只用根據(jù)父類的方法進(jìn)行設(shè)計(jì)。便于擴(kuò)展。1classPerson(Life):
2
def__init__(self,name,age,sex):
3
super().__init__(name,age)
4
self.sex=sex
5
6
defspeak(self):
7
print("你好,我是一個(gè)人")
8
9
defeat(self):
10
print("我在吃飯")1112person1=Person('p1',30,'man')
13person1.speak()
14person1.eat()15life=Life('li',20)16life.eat()
!發(fā)生錯(cuò)誤子類有新的數(shù)據(jù)時(shí),需要寫子類的構(gòu)造函數(shù),并顯式調(diào)用父類的構(gòu)造函數(shù)。這里super().__init__調(diào)用父類的構(gòu)造函數(shù),傳入父類需要的參數(shù)。當(dāng)子類有新的方法時(shí),直接在子類定義這些方法。父類無法調(diào)用子類獨(dú)有的方法。二、層次結(jié)構(gòu)如果重寫方法后,需要調(diào)用父類的方法修改Person類中speak()方法的定義1defspeak(self,parent_method=False):
2
ifparent_method:
3
super().speak()
4
else:
5
print("你好,我是一個(gè)人")67person1=Person('p1',30,'man')8person1.speak()#輸出:你好,我是一個(gè)人9person1.speak(True)#輸出:你好子類重寫父類的方法后,可以用super()調(diào)用父類中的方法。二、層次結(jié)構(gòu)判斷實(shí)例屬于哪個(gè)類型1classPerson(Life):
2
…34person1=Person('p1',30,'man')
5
print(isinstance(person1,Person))#True
6
print(isinstance(person1,Life))#True
7
print(isinstance(person1,object))#True
8
print(isinstance(person1,Cat))#False
9
print(isinstance(person1,Dog))#False1011
print(isinstance(1,int))#Trueisinstance(o,t),判斷實(shí)例o是否屬于t類型三、設(shè)計(jì)模式設(shè)計(jì)代碼的準(zhǔn)則,①.每個(gè)類盡量只負(fù)責(zé)一個(gè)功能領(lǐng)域。②.擴(kuò)展功能時(shí),盡量不修改原有代碼。③.實(shí)現(xiàn)功能時(shí),針對(duì)父類的方法設(shè)計(jì)。三、設(shè)計(jì)模式設(shè)計(jì)模式有很多,給出兩種簡單的模式。一、外觀模式Facadepattern:當(dāng)我們有很多不同類的實(shí)例共同完成一個(gè)任務(wù)時(shí),應(yīng)該新建一個(gè)外觀類,將不同實(shí)例交互的過程封裝起來,只給外界留下幾個(gè)基本的方法。二、模板模式Templatepattern。在父類中聲明方法,子類中實(shí)現(xiàn)方法。三、設(shè)計(jì)模式-外觀模式例5:假定已知訓(xùn)練數(shù)據(jù)train_data和待預(yù)測的數(shù)據(jù)predict_data,建立一個(gè)數(shù)據(jù)分析基本框架。(model.py)①數(shù)據(jù)預(yù)處理②分析方法③評(píng)估每個(gè)步驟設(shè)計(jì)一個(gè)類。輸入訓(xùn)練數(shù)據(jù)和預(yù)測數(shù)據(jù)輸出預(yù)測結(jié)果和模型效果①.數(shù)據(jù)預(yù)處理。1classPreProcess:
2
defstandardize(self,data):
3
pass
②.分析方法。1classAlgorithm:
2
deffit(self,train_data):
3
pass
4defpredict(self):
5
pass③.評(píng)估。1classEvaluate:
2
defevaluate(self,new_data,prediction):
3
pass1preProcess=PreProcess()#建立預(yù)處理類實(shí)例
2algorithm=Algorithm()#建立訓(xùn)練方法類實(shí)例
3evaluate=Evaluate()#建立評(píng)估類實(shí)例
4train_data=preProcess.standardize(train_data)#訓(xùn)練數(shù)據(jù)標(biāo)準(zhǔn)化
5predict_data=preProcess.standardize(predict_data)#預(yù)測數(shù)據(jù)標(biāo)準(zhǔn)化
6algorithm.fit(train_data)#擬合數(shù)據(jù)
7prediction=algorithm.predict(predict_data)#做預(yù)測
8evaluate.evaluate(predict_data,prediction)#預(yù)測效果評(píng)估三、設(shè)計(jì)模式-外觀模式建模①數(shù)據(jù)預(yù)處理②分析方法③評(píng)估輸入訓(xùn)練數(shù)據(jù)和預(yù)測數(shù)據(jù)輸出預(yù)測結(jié)果和模型效果輸入訓(xùn)練數(shù)據(jù)、預(yù)測數(shù)據(jù)、預(yù)處理方法、分析方法、評(píng)估方法輸出預(yù)測結(jié)果和模型效果④.建模類。1classModel:
2
def__init__(self,preProcess,algorithm,evaluate,train_data,predict_data):
3
self.preProcess=preProcess
4
self.algorithm=algorithm
5
self.evaluate=evaluate
6
self.train_data=train_data
7
self.predict_data=predict_data
8
9
defmodel(self):
10train_data=self.preProcess.standardize(self.train_data)#對(duì)訓(xùn)練數(shù)據(jù)預(yù)處理
11
predict_data=self.preProcess.standardize(self.predict_data)#對(duì)測試數(shù)據(jù)預(yù)處理
12
self.algorithm.fit(train_data)#用訓(xùn)練數(shù)據(jù)擬合模型
13
prediction=self.algorithm.predict(predict_data)#做預(yù)測
14
self.evaluate.evaluate(predict_data,prediction)#評(píng)估預(yù)測效果1preProcess=PreProcess()#建立預(yù)處理類實(shí)例
2algorithm=Algorithm()#建立訓(xùn)練方法類實(shí)例
3
evaluate=Evaluate()#建立評(píng)估類實(shí)例
4
model=Model(preProcess,algorithm,evaluate,train_data,predict_data)#建模類實(shí)例
5
model.model()#建模流程三、設(shè)計(jì)模式-模板模式二、模板模式,在父類中聲明方法,子類中實(shí)現(xiàn)方法。定義了一個(gè)結(jié)構(gòu)。例如,擴(kuò)展前面例子中的建模方法,增加線性回歸、lasso線性回歸。1classLinearRegression(Algorithm):
2
deffit(self,train_data):
3
#具體代碼
4
defpredict(self,predict_data):
5
#具體代碼1classLinearRegressionLasso(Algorithm):
2
def__init__(self,lambda_value):
3
self.lambda_value=lambda_value
4
deffit(self,train_data):
5
#具體代碼
6
defpredict(self,predict_data):
7
#具體代碼1classAlgorithm:
2
deffit(self,train_data):
3
pass
4defpredict(self,predict_data):
5
pass父類,fit只有聲明對(duì)于線性回歸和lasso線性回歸,只用更改第2句algorithm=LinearRegression()#建立線性回歸方法algorithm=LinearRegressionLasso(0.1)#建立Lasso線性回歸方法1preProcess=PreProcess()#建立預(yù)處理類
2algorithm=Algorithm()#建立訓(xùn)練類
3
evaluate=Evaluate()#建立評(píng)估類
4
model=Model(preProcess,algorithm,evaluate,train_data,predict_data)#建模類
5
model.model()#建模流程四、模塊如果代碼中多次使用同一操作,可將這個(gè)操作寫成模塊,使用時(shí)直接調(diào)用這個(gè)模塊,避免冗余代碼。或者,每個(gè)類放在一個(gè)模塊中,避免代碼過長,看起來也更清晰。例如,代碼中多次要用到一個(gè)操作,第一個(gè)數(shù)加上第二個(gè)數(shù)。寫成模塊中的一個(gè)函數(shù)(或者用類)。(myalgo.py,use_myalgo.py)四、模塊①.新建一個(gè)myalgo.pymyalgo.py:1defss(a,b):
2
returna+b
3
4print(ss(1,1))輸出:2②.同級(jí)目錄下新建一個(gè)compute.pycompute.py:1fromexample_6_moduleimportmyalgo
2print(myalgo.ss(2,2))輸出:24在import導(dǎo)入模塊時(shí),執(zhí)行了模塊文件中的print(ss(1,1))在python工程的根目錄新建了文件夾example_6_module來放代碼。四、模塊解決方案一:myalgo.py:1defss(a,b):
2
returna+b
解決方案二:myalgo.py:1defss(a,b):
2
returna+b
3
4if__name__=='__main__':
5
print(ss(1,1))如果直接執(zhí)行這個(gè)文件,會(huì)執(zhí)行print(ss(1,1))。如果import這個(gè)文件,不會(huì)執(zhí)行print(ss(1,1))。缺點(diǎn):①.當(dāng)函數(shù)較復(fù)雜時(shí),需要測試這個(gè)函數(shù)。②.需要這個(gè)文件本身也能夠執(zhí)行任務(wù)。四、模塊①.新建一個(gè)myalgo.pymyalgo.py:1defss(a,b):
2
returna+b
3
4if__name__=='__main__':
5
print(ss(1,1))直接執(zhí)行時(shí),輸出:2②.同級(jí)目錄下新建一個(gè)compute.pycompute.py:1fromexample_6_moduleimportmyalgo
2print(myalgo.ss(2,2))輸出:4四、模塊myalgo.py:1defss(a,b):
2
returna+b*2
3
4if__name__=='__main__':
5
print(ss(1,1))這個(gè)__name__稱為文件模塊名。當(dāng)直接執(zhí)行源文件時(shí),源文件處于主程序,那么__name__=
‘__main__’。否則,如果這個(gè)文件被當(dāng)作一個(gè)模塊導(dǎo)入,那么__name__為模塊的名字。四、模塊①.新建一個(gè)myalgo.pymyalgo.py:1defss(a,b):
2
returna+b
3
4if__name__=='__main__':
5
print(ss(1,1))6else:
7
print(__name_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年快中子增殖堆及配套產(chǎn)品項(xiàng)目合作計(jì)劃書
- 2025年太陽能熱發(fā)電系統(tǒng)合作協(xié)議書
- 2025年分級(jí)設(shè)備地礦勘測設(shè)備:鉆探機(jī)合作協(xié)議書
- 可穿戴設(shè)備電池壽命測試規(guī)程
- 2025年鎂質(zhì)瓷合作協(xié)議書
- 2025年治療精神障礙藥項(xiàng)目合作計(jì)劃書
- 阿凡達(dá)觀后感生態(tài)與文明的思考
- 水泥混凝土路面施工合同
- 三字經(jīng)經(jīng)典解讀與傳承
- FDU-PB-22-生命科學(xué)試劑-MCE
- 2025年上半年贛州市于都縣招聘城管協(xié)管員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年長沙衛(wèi)生職業(yè)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2025屆高考數(shù)學(xué)一輪專題重組卷第一部分專題十四立體幾何綜合文含解析
- 中考數(shù)學(xué)總復(fù)習(xí)第一章第3課時(shí)二次根式課件
- 福建省泉州市南安市2024-2025學(xué)年九年級(jí)上學(xué)期期末考試語文試題(無答案)
- 2025年中國電子煙行業(yè)發(fā)展前景與投資戰(zhàn)略規(guī)劃分析報(bào)告
- 貨物學(xué)基礎(chǔ) 課件 項(xiàng)目一 任務(wù)一 貨物的基本概念
- 無人機(jī)法律法規(guī)與安全飛行 第2版空域管理
- 我的小學(xué)生活
- 醫(yī)療器材申請(qǐng)物價(jià)流程
- 2024具身大模型關(guān)鍵技術(shù)與應(yīng)用報(bào)告-哈爾濱工業(yè)大學(xué)
評(píng)論
0/150
提交評(píng)論