版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
python類和模塊楊志峰環(huán)境:Anacondapython3.6開發(fā)工具:pycharm類一、數(shù)據(jù)類型二、層次結(jié)構(gòu)三、設(shè)計模式四、模塊一、數(shù)據(jù)類型內(nèi)置數(shù)據(jù)類型類型名實例(instance)方法(method)整型inta=1ora=int(1)四則運算等浮點型floatb=0.5orb=float(0.5)四則運算等字符串型strc=‘Hello’orc=str(‘Hello’)字符串截取等列表listd=[]ord=list()添加、刪除元素等字典dicte={}ore=dict()添加、刪除元素等一、數(shù)據(jù)類型例1,list這個類型。(data_type.py)創(chuàng)建一個list實例,data=[1,2,3]。加入一個元素,data.append(1)。刪除這個實例,deldata或者程序運行結(jié)束時自動銷毀這個實例。del用在想節(jié)省內(nèi)存的時候。
‘.’運算符的用法:①.前面是一個實例(或類型),后面是屬于這個類型的方法。②.訪問模塊中的包。一、數(shù)據(jù)類型對于一個數(shù)據(jù)類型知道的不知道的1.類型名2.怎樣創(chuàng)建和刪除一個實例3.與這個數(shù)據(jù)類型有關(guān)的方法1.類型中,數(shù)據(jù)的內(nèi)部表示2.屬于類的方法的具體細(xì)節(jié)一、數(shù)據(jù)類型體現(xiàn)了封裝的思想,數(shù)據(jù)類型給外界暴露方法,隱藏內(nèi)部細(xì)節(jié)。對于特定問題,內(nèi)置數(shù)據(jù)類型可能不夠用或者用起來很麻煩。我們可以自定義數(shù)據(jù)類型,將數(shù)據(jù)和作用于它們上的方法綁定在一起,構(gòu)造一個新數(shù)據(jù)類型。一、數(shù)據(jù)類型
一、數(shù)據(jù)類型1classCoordinate(object):2"""3
二維平面坐標(biāo)類。45可以求坐標(biāo)距離,比較坐標(biāo)大小。6
"""class用來定義類的關(guān)鍵字Coordinate是類名,類名以大寫字母開頭括號內(nèi)的object表示該類繼承object類:表示類的定義結(jié)束“”“…”“”表示注釋,寫類的內(nèi)部數(shù)據(jù),行為等空四個空格,表示下面是類的內(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__()是個特殊方法,用來定義怎樣創(chuàng)建類的實例。所有類都必須實現(xiàn)或者繼承這個方法。注意是雙下劃線。一般稱為構(gòu)造函數(shù)。用一些高級技巧可以繞過__init__()來創(chuàng)建對象,詳見pythoncookbook一、數(shù)據(jù)類型綁定數(shù)據(jù)1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None第一個參數(shù)self指這個類的一個實例。表示這個方法屬于這個類的一個實例。一、數(shù)據(jù)類型綁定數(shù)據(jù)1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None第一個參數(shù)后面的參數(shù),這里是x和y,可以將它們綁定在內(nèi)部數(shù)據(jù)上。形如(self.*)的數(shù)據(jù)稱為實例變量,屬于實例。一、數(shù)據(jù)類型綁定數(shù)據(jù)1classCoordinate(object):2def__init__(self,x,y):
3
self.x=x
4
self.y=y
5
self.name=None所有的實例變量都應(yīng)在構(gòu)造函數(shù)內(nèi)賦值(初始化)。前兩句綁定傳入的數(shù)據(jù)。由于沒有傳入與name有關(guān)的數(shù)據(jù),將name賦值為None。一、數(shù)據(jù)類型創(chuàng)建實例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ù)據(jù)類型直接訪問和修改內(nèi)部數(shù)據(jù)1data1=Coordinate(1,2)
2data2=Coordinate(-1,-1)3
4print(data1.x)
#訪問數(shù)據(jù)5data1.x=10#修改數(shù)據(jù)’.’運算符訪問實例中的實例變量。按照規(guī)范,避免用’.’運算符直接訪問和修改數(shù)據(jù)。為了簡單,可不遵守這個規(guī)范。動態(tài)綁定一個實例變量1data1.z=3
為了靈活性,python支持這種做法,很少用到。會造成data1和data2中實例變量不同。一、數(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ù)類型變量名前面加兩個下劃線,希望不被外界訪問。如果加一個下劃線,建議輕易不被外界訪問。對于方法來說也一樣。隱藏內(nèi)部數(shù)據(jù)表示,實現(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)
!出錯10print(data1._Coordinate__x)#正確11print(data1._y)#正確python自動給加雙下劃線的變量或函數(shù),前面補(bǔ)上_類名一、數(shù)據(jù)類型計算兩個坐標(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)傳入另一個Coordinate實例,計算兩個坐標(biāo)的歐式距離兩個坐標(biāo)相加整型這樣的基本數(shù)據(jù)類型可用’+’,但在坐標(biāo)類上’+’沒有定義,需要自定義坐標(biāo)類上的’+’運算。用重載(overload)擴(kuò)展’+’的支持的參數(shù)類型,使它支持坐標(biāo)類型相加。運算符/操作內(nèi)置函數(shù)重載后運算+__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ù)類型兩個坐標(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)#另一種方式由于重載了’+’運算符,可以直接加兩個坐標(biāo)實例。執(zhí)行’+’操作時,判斷前面那個變量是Coordinate類的實例,因此調(diào)用Coordinate類的__add__(self,other)方法。一、數(shù)據(jù)類型輸出實例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實例,調(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動態(tài)綁定實例變量,不影響類變量。類變量是所有實例共享的變量,是公共的數(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用來計數(shù),每創(chuàng)建一個實例,類變量加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
動態(tài)綁定類變量,很少用到。一、數(shù)據(jù)類型實例變量類變量①.在__init__()中定義②.每個實例特有③.只有它所屬的實例可以訪問、修改它④.在類內(nèi)部,用self.變量名訪問、修改它。在類外部,用實例名.變量名訪問、修改它①.在類中定義,不在方法中定義②.屬于類,類的所有實例所共有③.任何實例都可以訪問、修改它④.無論在類的內(nèi)部還是外部,建議用類名.變量名訪問、修改它實例變量和類變量的比較類方法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)格式錯誤')1112data4=Coordinate.create(3,4)#創(chuàng)建一個(3,4)坐標(biāo)實例
13
data5=Coordinate.create('4,5')#創(chuàng)建一個(4,5)坐標(biāo)實例
14
data6=Coordinate.create('5/6')
#創(chuàng)建一個(5,6)坐標(biāo)實例@classmethod是個裝飾器,表示下面是一個類方法。第一個參數(shù)cls指這個類。表示這個方法屬于這個類。可以擴(kuò)展__init__函數(shù)支持的參數(shù)。裝飾器一般用函數(shù)式編程得到,思路是一個函數(shù)的參數(shù)是另一個函數(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ù)和類、實例都沒有關(guān)系。在普通函數(shù)前面有個類名,用類組織普通函數(shù)。一、數(shù)據(jù)類型當(dāng)任務(wù)很復(fù)雜時,可以拆分為幾個簡單的任務(wù),每個簡單任務(wù)對應(yīng)一個類,這時需要用多個類。分成了多個類,團(tuán)隊合作的時候,可以每個人負(fù)責(zé)一個類,最后把它們組合起來。在一個類中放入另一個類,構(gòu)成類的組合。有兩種常用的方法:①.構(gòu)造注入②.設(shè)值注入一、數(shù)據(jù)類型例3:有一個內(nèi)容是一些整數(shù)的csv文件,需要把文件中的所有數(shù)加起來。定義一個文件操作類FileOperator,用來讀csv文件。另一個管理類Manager,用來求和,把文件操作類放入管理類。(csv_sum.py)一、數(shù)據(jù)類型①.構(gòu)造注入,構(gòu)造時放入另一類的實例。1classManager:2def__init__(self,file_operator):
3
self.file_operator=file_operator1classFileOperator:…1fileOp=FileOperator()#創(chuàng)建一個FileOperator類的實例
2manager=Manager(fileOp)#創(chuàng)建一個Manager類的實例
3sum=pute('test.csv')#傳入csv文件名
4print(sum)#輸出計算結(jié)果一、數(shù)據(jù)類型②.設(shè)值注入,用setter函數(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)建一個FileOperator類的實例
2manager=Manager()#創(chuàng)建一個Manager類的實例
3manager.set_file_operator(fileOp)#通過setter函數(shù)注入實例
4sum=pute('test.csv')#傳入csv文件名
5print(sum)#輸出計算結(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更加抽象對于一個類,向上找,在樹的路徑上的統(tǒng)稱為父類,習(xí)慣上父類指上一層與它直接相連的那個類;向下找,在樹的路徑上的統(tǒng)稱為子類,習(xí)慣上子類指下一層與它直接相連的那個類。共同數(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()#輸出:你好生命類,包括名字和年齡兩個實例變量、一個說話方法。二、層次結(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ù)。子類實現(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的子類實例。因為Life這個父類有speak()方法,那么子類也有speak()方法。由于子類重寫了父類的speak()方法,那么子類和父類的speak()方法行為不同。根據(jù)life屬于的子類類型,決定speak()方法的行為。二、層次結(jié)構(gòu)子類中的方法調(diào)用順序:實例調(diào)用一個方法時,先從自身所屬的類中找,如果找不到,從父類中找,如果還找不到,從父類的父類中找,依次找下去。執(zhí)行找到的第一個方法。如果一直到object仍然找不到這個方法,發(fā)生錯誤。重寫的好處:子類能夠根據(jù)需要實現(xiàn)父類的方法,只用根據(jù)父類的方法進(jìn)行設(shè)計。便于擴(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("你好,我是一個人")
8
9
defeat(self):
10
print("我在吃飯")1112person1=Person('p1',30,'man')
13person1.speak()
14person1.eat()15life=Life('li',20)16life.eat()
!發(fā)生錯誤子類有新的數(shù)據(jù)時,需要寫子類的構(gòu)造函數(shù),并顯式調(diào)用父類的構(gòu)造函數(shù)。這里super().__init__調(diào)用父類的構(gòu)造函數(shù),傳入父類需要的參數(shù)。當(dāng)子類有新的方法時,直接在子類定義這些方法。父類無法調(diào)用子類獨有的方法。二、層次結(jié)構(gòu)如果重寫方法后,需要調(diào)用父類的方法修改Person類中speak()方法的定義1defspeak(self,parent_method=False):
2
ifparent_method:
3
super().speak()
4
else:
5
print("你好,我是一個人")67person1=Person('p1',30,'man')8person1.speak()#輸出:你好,我是一個人9person1.speak(True)#輸出:你好子類重寫父類的方法后,可以用super()調(diào)用父類中的方法。二、層次結(jié)構(gòu)判斷實例屬于哪個類型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),判斷實例o是否屬于t類型三、設(shè)計模式設(shè)計代碼的準(zhǔn)則,①.每個類盡量只負(fù)責(zé)一個功能領(lǐng)域。②.擴(kuò)展功能時,盡量不修改原有代碼。③.實現(xiàn)功能時,針對父類的方法設(shè)計。三、設(shè)計模式設(shè)計模式有很多,給出兩種簡單的模式。一、外觀模式Facadepattern:當(dāng)我們有很多不同類的實例共同完成一個任務(wù)時,應(yīng)該新建一個外觀類,將不同實例交互的過程封裝起來,只給外界留下幾個基本的方法。二、模板模式Templatepattern。在父類中聲明方法,子類中實現(xiàn)方法。三、設(shè)計模式-外觀模式例5:假定已知訓(xùn)練數(shù)據(jù)train_data和待預(yù)測的數(shù)據(jù)predict_data,建立一個數(shù)據(jù)分析基本框架。(model.py)①數(shù)據(jù)預(yù)處理②分析方法③評估每個步驟設(shè)計一個類。輸入訓(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③.評估。1classEvaluate:
2
defevaluate(self,new_data,prediction):
3
pass1preProcess=PreProcess()#建立預(yù)處理類實例
2algorithm=Algorithm()#建立訓(xùn)練方法類實例
3evaluate=Evaluate()#建立評估類實例
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ù)測效果評估三、設(shè)計模式-外觀模式建模①數(shù)據(jù)預(yù)處理②分析方法③評估輸入訓(xùn)練數(shù)據(jù)和預(yù)測數(shù)據(jù)輸出預(yù)測結(jié)果和模型效果輸入訓(xùn)練數(shù)據(jù)、預(yù)測數(shù)據(jù)、預(yù)處理方法、分析方法、評估方法輸出預(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)#對訓(xùn)練數(shù)據(jù)預(yù)處理
11
predict_data=self.preProcess.standardize(self.predict_data)#對測試數(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)#評估預(yù)測效果1preProcess=PreProcess()#建立預(yù)處理類實例
2algorithm=Algorithm()#建立訓(xùn)練方法類實例
3
evaluate=Evaluate()#建立評估類實例
4
model=Model(preProcess,algorithm,evaluate,train_data,predict_data)#建模類實例
5
model.model()#建模流程三、設(shè)計模式-模板模式二、模板模式,在父類中聲明方法,子類中實現(xiàn)方法。定義了一個結(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只有聲明對于線性回歸和lasso線性回歸,只用更改第2句algorithm=LinearRegression()#建立線性回歸方法algorithm=LinearRegressionLasso(0.1)#建立Lasso線性回歸方法1preProcess=PreProcess()#建立預(yù)處理類
2algorithm=Algorithm()#建立訓(xùn)練類
3
evaluate=Evaluate()#建立評估類
4
model=Model(preProcess,algorithm,evaluate,train_data,predict_data)#建模類
5
model.model()#建模流程四、模塊如果代碼中多次使用同一操作,可將這個操作寫成模塊,使用時直接調(diào)用這個模塊,避免冗余代碼?;蛘?,每個類放在一個模塊中,避免代碼過長,看起來也更清晰。例如,代碼中多次要用到一個操作,第一個數(shù)加上第二個數(shù)。寫成模塊中的一個函數(shù)(或者用類)。(myalgo.py,use_myalgo.py)四、模塊①.新建一個myalgo.pymyalgo.py:1defss(a,b):
2
returna+b
3
4print(ss(1,1))輸出:2②.同級目錄下新建一個compute.pycompute.py:1fromexample_6_moduleimportmyalgo
2print(myalgo.ss(2,2))輸出:24在import導(dǎo)入模塊時,執(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í)行這個文件,會執(zhí)行print(ss(1,1))。如果import這個文件,不會執(zhí)行print(ss(1,1))。缺點:①.當(dāng)函數(shù)較復(fù)雜時,需要測試這個函數(shù)。②.需要這個文件本身也能夠執(zhí)行任務(wù)。四、模塊①.新建一個myalgo.pymyalgo.py:1defss(a,b):
2
returna+b
3
4if__name__=='__main__':
5
print(ss(1,1))直接執(zhí)行時,輸出:2②.同級目錄下新建一個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))這個__name__稱為文件模塊名。當(dāng)直接執(zhí)行源文件時,源文件處于主程序,那么__name__=
‘__main__’。否則,如果這個文件被當(dāng)作一個模塊導(dǎo)入,那么__name__為模塊的名字。四、模塊①.新建一個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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024司機(jī)聘用合同
- 挖掘機(jī)租賃市場合同樣本
- 2024年房屋經(jīng)紀(jì)服務(wù)合同
- 2024競價房屋買賣合同范本
- 江蘇省徐州市七年級上學(xué)期語文期中試卷5套【附答案】
- 2024【股權(quán)投資信托合同】股權(quán)投資合同
- 施工安全協(xié)議書案例分析
- 專業(yè)咨詢委托協(xié)議參考
- 房屋買賣合同協(xié)議書委托人2024年
- 標(biāo)準(zhǔn)的汽車租賃合同范本
- 總公司與分公司合并報表編制舉例
- 概率論與數(shù)理統(tǒng)計(茆詩松)第二版課后第二章習(xí)題參考答案_百度
- 錦綸染色過程的問題與解決方法
- 土地租金發(fā)放表
- 出租車計價器系統(tǒng)設(shè)計摘要和目錄
- 醫(yī)院水電安裝施工方案
- 計算機(jī)網(wǎng)絡(luò)考試重點整理
- 水泥攪拌樁機(jī)械進(jìn)場安裝驗收記錄表
- 高一物理的必修的一期中考試試卷解析告
- 網(wǎng)絡(luò)通信類visio圖庫
- 四年級英語上冊Unit4第四課時教案人教PEP標(biāo)準(zhǔn)版
評論
0/150
提交評論