1、閉包
閉包是函數(shù)里面嵌套函數(shù),外層函數(shù)返回里層函數(shù),這種情況稱(chēng)之為閉包,內(nèi)函數(shù)調(diào)用外部函數(shù)的變量,外函數(shù)返回內(nèi)函數(shù)的調(diào)用
def dome1():
a = 100
def dome2():
return a + a
return dome2
a = dome1() # a存的是dome2的函數(shù)體,<function dome1.<locals>.dome2 at 0x000001EC7E472940>
print(a()) # 相當(dāng)于調(diào)用函數(shù)dome2
2、遞歸
在函數(shù)內(nèi)部調(diào)用自身本身,這個(gè)就是遞歸函數(shù),遞歸函數(shù)要有出口,沒(méi)有出口會(huì)出現(xiàn)內(nèi)存溢出
def funs(n):
if n==1:
return 1
return n+funs(n-1)
print(funs(4))
3、類(lèi)
類(lèi):用來(lái)描述具有相同的屬性和方法的對(duì)象的集合,包含類(lèi)名、屬性和方法(類(lèi)屬性、類(lèi)方法不是必須的,需不需要取決于程序設(shè)計(jì)),類(lèi)名一般用單駝峰(Myperson)或雙駝峰(MyPerson)表示
# 類(lèi)的定義
class Myperson: # 類(lèi)名
name='sunwukong' # 屬性
age='500' # 屬性
def fly(self): # 方法
print('我能飛超級(jí)遠(yuǎn)')
# 類(lèi)的實(shí)例化(類(lèi)的使用)
sunwukong=Myperson()
4、構(gòu)造方法
通過(guò)init()方法來(lái)實(shí)現(xiàn),如果類(lèi)里面沒(méi)有寫(xiě)init方法,Python會(huì)自動(dòng)創(chuàng)建,不需要做任何操作,如果要實(shí)現(xiàn)添加自己的一些屬性,就需要自己定義,一個(gè)類(lèi)里面無(wú)論是自己寫(xiě)還是系統(tǒng)自動(dòng)創(chuàng)建,一定要有init這個(gè)方法
class Person:
def __init__(self,name):
print(f'{name}構(gòu)造方法')
p1=Person('我是第一個(gè)')
p2=Person('我是第二個(gè)')
#
我是第一個(gè)構(gòu)造方法
我是第二個(gè)構(gòu)造方法
5、析構(gòu)方法
通過(guò)del方法實(shí)現(xiàn)的,是一種特殊的方法,用在對(duì)象被銷(xiāo)毀時(shí)執(zhí)行一些清理操作,如資源釋放等,當(dāng)對(duì)象被銷(xiāo)毀時(shí),無(wú)論是程序結(jié)束還是對(duì)象被手動(dòng)刪除,Python解釋器都會(huì)自動(dòng)調(diào)這個(gè)方法。
凡是以--開(kāi)頭--結(jié)尾的方法統(tǒng)稱(chēng)為魔法方法
6、定義一個(gè)長(zhǎng)方形類(lèi),綁定長(zhǎng)和寬這兩個(gè)屬性,創(chuàng)造一個(gè)計(jì)算面積的方法。
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
reactangle_area = Rectangle(3,4)
print(f'長(zhǎng)方形的面積是:{reactangle_area.area()}')