python中的內部函式 物件和類

2021-10-04 12:39:47 字數 4437 閱讀 7409

1、內部函式只能在外部函式進行呼叫,如果在外部函式外呼叫,則報錯。

# 內部函式

defouter()

: s =

'this is outer'

definner()

: s1 =

'this is inner'

print

(s1)

print

(s) inner(

)outer(

)# this is outer this is inner

inner(

)#報錯

2、建構函式__init__()與析構函式__del()__

函式 _new()_:用於建立物件,但一般無需重定義該方法

函式_init()_:用於初始化建立好的物件。

只要是類裡面的方法,self引數必須放第乙個引數位置。

del函式:該函式用於物件被銷毀時所需要的操作。比如:釋放物件占用的資源。python實現自動**無用物件,所以該函式一般不需要自定義。

3、 函式__call__()

可以用例項物件直接呼叫的。比如:

class

salaryaccount

:"""工資計算類"""

def__call__

(self,salary)

: yearsalary = salary*

12 daysalary = salary//

27.5

monthsalary = salary

return

dict

(yearsalary = yearsalary,daysalary = daysalary,monthsalary = monthsalary)

s = salaryaccount(

)print

(s(3000

))

4、 nonlocal與global

nonlocal是內部函式使用外部函式的變數時的一種說明方法,就像函式想使用全域性變數要用global關鍵字進行宣告一樣。

deff(

):a =

90def

inner()

:nonlocal a

print

(a) a=

10 inner(

)print

(a)f(

)

5、 legb規則

該規則是python使用變數時的一種優先順序順序,排位越靠前,優先順序越高:

l----->local (函式內部)

e----->enclosing (巢狀函式的外層函式內部)

g----->global (模板全域性)

b----->built-in (python關鍵字)

函式在使用變數的時候,遵守該規則。

str

='123'

defouter()

:str

='outer'

definner()

:str

='inner'

print

(str

,end=

',')

print

(str

,end=

',')

inner(

)outer(

)print

(str

)# inner,outer,123

1、類包括方法和屬性。類的通用語法格式:

class 類名:

#類的內部

例項:

class

mystudent

:# 類名一般首字元大寫,多個單詞駝峰原則

def__init__

(self,name,score)

:# 構造方法 ,需要寫的

self.name = name

self.score = score

defsay_score

(self)

:print

('的分數是'

.format

(self.name,self.score)

)s1 = mystudent(

'xiaoming',99

)#自動呼叫構造方法 __init__(self,name,score)

s1.say_score(

)'''

.是用於呼叫類裡面的方法

輸出結果:

xiaoming的分數是99

'''

乙個python物件包括:

idtype

value (1) 屬性 (2)方法

事實上,python在記憶體中放置好了類,然後如果建立該類物件,那麼這個物件所在的記憶體塊內部就存放了類的方法、屬性,但是如果給乙個物件增加屬性,那麼這個屬性是在類中所不存在的,具體如下:

class

mystudent

:# 類名一般首字元大寫,多個單詞駝峰原則

def__init__

(self,name,score)

:# 構造方法,self表示當前物件本身

self.name = name

self.score = score

defsay_score

(self)

:print

('的分數是'

.format

(self.name,self.score)

)s1 = mystudent(

'xiaoming',99

)s1.say_score(

)s1.age =

10# 通過物件增加的,但是在類中並沒有

print

(s1.age)

s2 = mystudent(

'1',90)

# s2中就沒有age這個屬性

2、類物件和例項物件

當我們定義了乙個類以後,該類的類名即為類物件。例項物件就是將類例項化的物件。

class

student

:pass

print

(type

(student)

)# 可以看出來,student就是乙個型別,我們把這種型別稱為類物件

將類例項化後傳給的物件成為例項物件

class

student

:def

__init__

(self,name,score)

: self.name = name

self.score = score

stu1 = student(

'xiaoming'

,100

)# stu1就是例項物件

3、類屬性與類方法

類屬性:類屬性是從屬於類物件的屬性。

class

student

: count =

0# 類屬性

classes =

'no.1'

def__init__

(self,name,score)

: self.name = name # 例項屬性

self.score = score

defprintinfo

(self,name)

:print

(name,

'is in class'

,student.classes)

# classes是從屬於類物件的屬性

類方法:類方式是從屬於「類物件」的方法。類方法通過裝飾器@classmethod來定義,格式如下:

@classmethod

def 類名(cls,……,):

函式體

其中,cls必須有,因為cls指的就是「類物件本身。注意:在類方法中無法訪問例項方法和例項物件

靜態方法:與普通函式沒有區別,只不過該函式放在了類內部,實際上通過類名就能進行呼叫。

@staticmethod

def 靜態方法名:

函式體

例項::

class

student

: @staticmethod

defadd

(a,b)

:print

(" + = "

.format

(a,b,

(a+b)))

student.add(90,

80)

Python 中的內部函式

特點 1,可以訪問外部函式的變數 2,內部函式可以修改外部函式的可變型別的變數比如 list 3,內部函式修改全域性的不可變變數時,需要在內部函式宣告global變數名 4,內部函式修改外部函式的不可變的變數時,需要在內部函式中宣告 nonlocal 變數名 nonlocal 關鍵字用於在巢狀函式內...

Python中的內部函式和閉包

python支援函式內嵌 def fun1 print fun1 正在被呼叫.def fun2 print fun2 正在被呼叫.fun2 fun1 fun1 正在被呼叫.fun2 正在被呼叫.fun2 traceback most recent call last file line 1,in f...

Python 中的內部函式 閉包

最近在學習 python 的過程中遇到了閉包這一概念,現總結如下 咱們看看下面一段 def greetingconfig prefix def greeting postfix print prefix,postfix return greeting m greetingconfig good mo...