自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python編程:裝飾器之有關(guān)函數(shù)的再認(rèn)知

開發(fā) 前端
裝飾器(Decorators)是Python中非常有用的工具。裝飾器是以另一個(gè)函數(shù)為參數(shù)并擴(kuò)展其功能而不顯式修改它的函數(shù)。它允許我們修改函數(shù)或類的行為而不涉及其源代碼。

?裝飾器(Decorators)是Python中非常有用的工具。裝飾器是以另一個(gè)函數(shù)為參數(shù)并擴(kuò)展其功能而不顯式修改它的函數(shù)。它允許我們修改函數(shù)或類的行為而不涉及其源代碼。

換句話說,裝飾器包裝一個(gè)函數(shù)是為了擴(kuò)展它的行為,而不是永久地修改它。

從這篇開始,就來研究下裝飾器是啥以及是如何在Python中工作的。

1.1關(guān)于函數(shù)

為了理解裝飾器是如何工作的,我們需要重新回顧Python中關(guān)于函數(shù)的一些重要概念。時(shí)刻意識(shí)到,在Python中,函數(shù)(function)的地位是一等公民,所以下面幾個(gè)觀念要牢記:

  • ü 函數(shù)可以賦值為常規(guī)變量;
  • ü 函數(shù)可以作為參數(shù)傳遞給其他函數(shù);
  • ü 函數(shù)可以返回函數(shù);
  • ü 函數(shù)體中可以有其他函數(shù)(內(nèi)部函數(shù))。

下面來看看關(guān)于這些要點(diǎn)的函數(shù)示例。

1.1.1 示例-1:賦值給常規(guī)變量

# 把函數(shù)賦值給常規(guī)變量:

# 定義簡(jiǎn)單函數(shù)
def sayHi(name:str):
return "Hi " + name + "."

#應(yīng)用:函數(shù)賦值給變量
hi = sayHi
print(hi("Solo Cui"))
#輸出結(jié)果
Hi Solo Cui.

在代碼中,我們將函數(shù)定義為sayHi。然后將這個(gè)函數(shù)賦值給一個(gè)名為hi的局部變量。這個(gè)變量hi也是一個(gè)函數(shù)——這種情況下,可把被賦值的變量看作是函數(shù)的別名。接著就是把變量hi當(dāng)做函數(shù)調(diào)用:hi("Solo Cui")。

1.1.2 示例-2:函數(shù)作為參數(shù)傳遞

代碼清單如下:

# 函數(shù)作為參數(shù)傳遞
def printHello(name):
print("Hello,", name)

# 把函數(shù)作為參數(shù)的函數(shù)
def hiWithFunction(func, xname):
func(xname)

#調(diào)用以函數(shù)為參數(shù)的函數(shù)
hiWithFunction(printHello,'上官婉兒')

代碼很好理解:定義了兩個(gè)函數(shù),一個(gè)函數(shù)可以接收函數(shù)型參數(shù),另一個(gè)函數(shù)作為參數(shù)傳遞給可接收函數(shù)型參數(shù)的函數(shù)

1.1.3 示例-3:返回函數(shù)的函數(shù)

代碼清單如下:

#示例3:返回函數(shù)的函數(shù)
def returnXFunction():
return sayHi #示例1中定義的函數(shù),可自行定義其它函數(shù)

# 調(diào)用函數(shù)
xHi = returnXFunction()
print(xHi("BirdMan"))

這里定義了一個(gè)簡(jiǎn)單的返回另一函數(shù)的函數(shù),即returnXFunction(),調(diào)用該函數(shù),把其返回的值賦給一個(gè)變量xHi,然后就可以基于變量名xHi來執(zhí)行返回函數(shù)的功能了。

1.1.4 示例-4:函數(shù)體內(nèi)置函數(shù)

也就是在一個(gè)函數(shù)體內(nèi)部定義函數(shù)。請(qǐng)看代碼:

# 示例4:函數(shù)體內(nèi)不含稅
def outerXFunction(msg):
'''外部函數(shù)'''
#代碼...
#定義內(nèi)嵌函數(shù)
def innerXFunc():
'''內(nèi)部函數(shù)'''
print(msg,'來自內(nèi)嵌函數(shù).')

#函數(shù)體內(nèi)調(diào)用內(nèi)嵌函數(shù)
innerXFunc()

#調(diào)用外部函數(shù)
outerXFunction("火麒麟")

我在函數(shù)outerXFunction的內(nèi)部定義了一個(gè)innerXFunc函數(shù),并在外部的函數(shù)體內(nèi)部調(diào)用內(nèi)嵌的函數(shù),以便在調(diào)用外部函數(shù)時(shí),使得內(nèi)嵌函數(shù)獲得執(zhí)行。

如代碼所示,調(diào)用外部函數(shù)時(shí),把字符串“火麒麟”傳給參數(shù)msg。輸出“火麒麟 來自內(nèi)嵌函數(shù).”是由自內(nèi)嵌函數(shù)完成。這里需要注意的是innerXFunc使用的msg變量在其自身函數(shù)體內(nèi)并沒有定義,換句話說,它是使用的變量來自其父級(jí)范圍——這就是Python中閉包的理念。

簡(jiǎn)單說一句,關(guān)于Python閉包:閉包是一個(gè)函數(shù)對(duì)象,它記住父級(jí)對(duì)象作用域中的值,可用來在一個(gè)函數(shù)與一組“私有”變量之間創(chuàng)建關(guān)聯(lián)關(guān)系。在給定函數(shù)被多次調(diào)用的過程中,這些私有變量能夠保持其持久性。?

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2013-05-06 10:22:07

結(jié)對(duì)編程敏捷開發(fā)敏捷管理

2010-02-01 17:50:32

Python裝飾器

2023-02-07 07:47:52

Python裝飾器函數(shù)

2021-06-01 07:19:58

Python函數(shù)裝飾器

2016-11-01 09:24:38

Python裝飾器

2023-11-21 07:17:36

Reac函數(shù)組件

2010-03-01 09:43:09

Python編程語(yǔ)言

2024-09-23 09:00:00

裝飾器函數(shù)代碼

2024-11-04 15:30:43

Python裝飾器函數(shù)

2024-05-24 11:36:28

Python裝飾器

2010-07-23 16:10:34

Perl用戶函數(shù)

2022-11-09 07:42:51

Python編程函數(shù)

2021-05-27 07:12:19

Python函數(shù)裝飾器

2024-02-28 07:59:25

2021-07-12 10:24:36

Go裝飾器代碼

2022-10-24 07:31:53

Python編程裝飾器

2021-04-11 08:21:20

Python@property裝飾器

2025-01-22 15:58:46

2022-09-19 23:04:08

Python裝飾器語(yǔ)言

2010-02-01 17:11:45

Python 解釋器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)