類模塊補(bǔ)充材料_第1頁
類模塊補(bǔ)充材料_第2頁
類模塊補(bǔ)充材料_第3頁
類模塊補(bǔ)充材料_第4頁
類模塊補(bǔ)充材料_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論