站長(zhǎng)在線零基礎(chǔ)Python完全自學(xué)教程23:函數(shù)的返回值、作用域和匿名函數(shù)
導(dǎo)讀:歡迎你來到站長(zhǎng)學(xué)堂,學(xué)習(xí)站長(zhǎng)在線出品的在線課程《零基礎(chǔ) Python完全自學(xué)教程》今天給大家分享的是第23課《函數(shù)的返回值、作用域和匿名函數(shù)》。本文是一個(gè)大課程分成了下面4節(jié)小課程:Python中函數(shù)的返回值、Python函數(shù)中的局部變量、Python函數(shù)中的全局變量、Python函數(shù)中的匿名函數(shù)等內(nèi)容。
永久美國(guó)免備案虛擬主機(jī)1元1天,15元1月,100元1年,1000元永久
站長(zhǎng)在線旗下答案網(wǎng)站,全站所有題目,免費(fèi)查看答案和答案解析
歡迎你來到站長(zhǎng)學(xué)堂,學(xué)習(xí)站長(zhǎng)在線出品的在線課程《零基礎(chǔ) python完全自學(xué)教程》今天給大家分享的是第23課《函數(shù)的返回值、作用域和匿名函數(shù)》。本文是一個(gè)大課程分成了下面4節(jié)小課程:Python中函數(shù)的返回值、Python函數(shù)中的局部變量、Python函數(shù)中的全局變量、Python函數(shù)中的匿名函數(shù)等內(nèi)容。
23.1、Python中函數(shù)的返回值
歡迎你來到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)Python知識(shí),本文學(xué)習(xí)的是《Python中函數(shù)的返回值》。本文的主要內(nèi)容有:函數(shù)的返回值的含義、函數(shù)設(shè)置返回值的作用、return語句位置與多條 return語句的總結(jié)。
在前面的Python課程中,我們創(chuàng)建的函數(shù)都只是為我們做一些事,做完了就結(jié)束。但實(shí)際上,有時(shí)還需要對(duì)事情的結(jié)果進(jìn)行獲取。
列如,你在炒菜的時(shí)候發(fā)現(xiàn)沒有鹽了,你拿出2塊錢,叫你兒子去樓下的小賣店買一包鹽回來。在這個(gè)例子中,你給你兒子2塊錢,就相當(dāng)于調(diào)用函數(shù)的參數(shù)傳遞。你兒子把這包鹽買回來是目標(biāo),這時(shí)候這包鹽就是返回值。
23.1.1、Python中函數(shù)的返回值的含義
Python中函數(shù)的返回值就是程序中函數(shù)完成一件事情后,最后給調(diào)用者的結(jié)果。
23.1.2、Python為函數(shù)設(shè)置返回值的作用
Python為函數(shù)設(shè)置返回值的作用就是將函數(shù)的處理結(jié)果返回給調(diào)用它的函數(shù)。
在Python中,可以在函數(shù)體內(nèi)使用return語句為函數(shù)指定返回值。該返回值可以是任意類型,并且無論return語句出現(xiàn)在函數(shù)的什么位置,只要得到執(zhí)行,就會(huì)直接結(jié)束函數(shù)的執(zhí)行。
return語句的語法格式如下:
return [value]
其中,相關(guān)參數(shù)說明如下:
return:為函數(shù)指定返回值后,在調(diào)用函數(shù)時(shí),可以把它賦給一個(gè)變量(如result),用于保存函數(shù)的返回結(jié)果。如果返回一個(gè)值,那么result中保存的就是返回的一個(gè)值,該值可以是任意類型。如果返回多個(gè)值,那么result中保存的是一個(gè)元組。
value:可選參數(shù),用于指定要返回的值,可以返回一個(gè)值,也可返回多個(gè)值。
站長(zhǎng)在線特別提醒:當(dāng)函數(shù)中沒有return語句時(shí),或者省略了return語句的參數(shù)時(shí),將返回None,即返回空值。
def a(x,y):
num = x + y
return
print(a(1,2))
運(yùn)行結(jié)果為:
None
>>>
print僅僅是打印在控制臺(tái),而return則是將return后面的部分作為返回值:作為函數(shù)的輸出,可以用變量接走,繼續(xù)使用該返回值做其它事。
函數(shù)需要先定義后調(diào)用,函數(shù)體中return語句的結(jié)果就是返回值。如果一個(gè)函數(shù)沒有reutrn語句,其實(shí)它有一個(gè)隱含的return語句,返回值是None,類型也是'Nonetype'。
23.1.3、return語句位置與多條 return語句的總結(jié):
1、python函數(shù)使用return語句返回 "返回值",可以將其賦給其它變量作其它的用處;
2、所有函數(shù)都有返回值,如果沒有return語句,會(huì)隱式地調(diào)用 return None 作為返回值;
3、一個(gè)函數(shù)可以存在多條return語句,但只有一條可以被執(zhí)行,如果沒有一條reutrn語句被執(zhí)行,同樣會(huì)隱式調(diào)用return None作為返回值;
4、如果有必要,可以顯式調(diào)用return None明確返回一個(gè)None(空值對(duì)象)作為返回值,可以簡(jiǎn)寫為return,不過python中簡(jiǎn)潔即美德,所以一般能不寫就不寫;
5、如果函數(shù)執(zhí)行了return語句,函數(shù)會(huì)立刻返回,結(jié)束調(diào)用,return之后的其它語句都不會(huì)被執(zhí)行了(可用于結(jié)束代碼塊)。
23.2、在Python函數(shù)中的局部變量詳解
歡迎你來到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)Python知識(shí),本文學(xué)習(xí)的是《在Python函數(shù)中的局部變量詳解》。本文的主要內(nèi)容有:變量的作用域的概念、局部變量的概念、局部變量的舉例。
要說起Python中的局部變量,首先要知道變量的作用域?那什么是變量的作用域呢?
23.2.1、變量的作用域的概念:
變量的作用域是指變量有效作用的區(qū)域, 如果超出該區(qū)域,再次訪問時(shí)就會(huì)出錯(cuò)。
按照作用域的不同,變量可分為局部變量和全局變量。
在本文中,我們學(xué)習(xí)局部變量。
23.2.2、局部變量的概念:
局部變量是指在函數(shù)內(nèi)部定義并使用的變量,只能在函數(shù)內(nèi)部使用有效。
怎么理解這句話呢?
這樣說吧:函數(shù)內(nèi)部的名字,只是在函數(shù)運(yùn)行時(shí)才會(huì)創(chuàng)建,在函數(shù)運(yùn)行之前或者運(yùn)行結(jié)束之后,所有的名字都將不存在。如果函數(shù)外部使用函數(shù)內(nèi)部定義的變量,就會(huì)出現(xiàn)NameError錯(cuò)誤。
23.2.3、局部變量的舉例:
下面舉一個(gè)例子來說明:
定義一個(gè)函數(shù)為a ,在該函數(shù)內(nèi)部定義一個(gè)變量b(局部變量),并為變量b賦值,然后輸出該變量,最后在函數(shù)外部輸出該變量,代碼如下:
def a(): # 定義一個(gè)名稱為a()的函數(shù)
b = "我愛Python,我在學(xué)學(xué)習(xí)Python!" # 給內(nèi)部自定義變量b賦值
print('函數(shù)內(nèi)部局部變量b=',b) # 輸出函數(shù)內(nèi)部局部變量的值
a() # 調(diào)用該函數(shù)
print('函數(shù)外部局部變量b=',b) # 輸出函數(shù)外部局部變量的值
運(yùn)行結(jié)果如下:
函數(shù)內(nèi)部局部變量b= 我愛Python,我在學(xué)學(xué)習(xí)Python!
Traceback (most recent call last):
File "D:\Python\Python310\Doc\000.py", line 5, in <module>
print('函數(shù)外部局部變量b=',b) # 輸出函數(shù)外部局部變量的值
NameError: name 'b' is not defined
>>>
根據(jù)上面的結(jié)果,我們看見了兩個(gè)不同的輸出結(jié)果,第一個(gè)輸出是正確的,沒有任何問題,但是第二個(gè)輸出就會(huì)出現(xiàn)“NameError”錯(cuò)誤了。
翻譯“name 'b' is not defined”的意思是:未定義名稱“b”,也就是說訪問的變量b不存在。
23.3、在Python函數(shù)中的全局變量詳解
歡迎你來到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)Python知識(shí),本文學(xué)習(xí)的是《Python中的局部變量詳解》。本文的主要內(nèi)容有:什么是全局變量、在函數(shù)外部定義的變量是全局變量、在函數(shù)內(nèi)部定義中添加global關(guān)鍵詞后變成全局變量。
我們?cè)谏瞎?jié)課程《在Python函數(shù)中的局部變量詳解》中,說到了局部變量,這個(gè)非常的簡(jiǎn)單,局部變量是指在函數(shù)內(nèi)部定義并使用的變量,只能在函數(shù)內(nèi)部使用有效。本節(jié)課就來講解一下全局變量。
23.3.1、什么是全局變量?
在Python中,全局變量指的是可以作用于函數(shù)內(nèi)部和外部的變量。
在這里有兩種情況:在函數(shù)的外部定義和內(nèi)部定義添加global關(guān)鍵詞變成全局變量。
接下來,站長(zhǎng)在線將一一解讀這兩種情況。
23.3.2、在函數(shù)外部定義的變量是全局變量。
假設(shè)一個(gè)變量在函數(shù)的外部定義,那么這個(gè)函數(shù)就可以在函數(shù)的內(nèi)部訪問,也可以在函數(shù)的外部的訪問。
示例:定義一個(gè)全局變量b,然后定義一個(gè)函數(shù)a,最后在該函數(shù)的內(nèi)部和外部輸出全局變量m的值,代碼如下:
b = '我愛Python,我在學(xué)習(xí)Python!' # 定義全局變量
def a(): # 定義函數(shù)
print('函數(shù)內(nèi)部全局變量b=',b) # 在函數(shù)內(nèi)部輸出全局變量
a()
print('函數(shù)外部全局變量b=',b) # 在函數(shù)外部輸出全局變量
運(yùn)行結(jié)果如下:
函數(shù)內(nèi)部全局變量b= 我愛Python,我在學(xué)習(xí)Python!
函數(shù)外部全局變量b= 我愛Python,我在學(xué)習(xí)Python!
>>>
23.3.3、在函數(shù)內(nèi)部定義中添加global關(guān)鍵詞后變成全局變量。
在Python中,內(nèi)部定義的函數(shù)中,添加關(guān)鍵詞global后,改變量就變成了全局變量。在函數(shù)的外部也可以訪問到該變量,同時(shí)還可以在函數(shù)的內(nèi)部進(jìn)行修改。
示例:定義相同名稱不同內(nèi)容的全局變量和局部變量b,并輸出它們的值:
b = '我愛Python,我在學(xué)習(xí)Python!' # 定義全局變量
print('函數(shù)外部全局變量b=',b) # 在函數(shù)外部輸出全局變量
def a(): # 定義函數(shù)
b = '人生苦短,我用Pyhon!' # 定義局部變量
print('函數(shù)內(nèi)部局部變量b=',b) # 在函數(shù)內(nèi)部輸出全局變量
a() # 調(diào)用函數(shù)
print('函數(shù)外部全局變量b=',b) # 在函數(shù)外部輸出全局變量
運(yùn)行結(jié)果如下:
函數(shù)外部全局變量b= 我愛Python,我在學(xué)習(xí)Python!
函數(shù)內(nèi)部局部變量b= 人生苦短,我用Pyhon!
函數(shù)外部全局變量b= 我愛Python,我在學(xué)習(xí)Python!
>>>
從上面的結(jié)果可以看出,內(nèi)部變量(局部變量)可以和外部變量(全局變量)重名,不影響全局變量的值。
當(dāng)然在函數(shù)內(nèi)部變量前面添加關(guān)鍵字global,就變成了全局變量了,代碼如下:
b = '我愛Python,我在學(xué)習(xí)Python!' # 定義全局變量
print('函數(shù)外部全局變量b=',b) # 在函數(shù)外部輸出全局變量
def a(): # 定義函數(shù)
global b # 添加global關(guān)鍵字
b = '人生苦短,我用Pyhon!' # 定義局部變量
print('函數(shù)內(nèi)部全局變量b=',b) # 在函數(shù)內(nèi)部輸出全局變量
a() # 調(diào)用函數(shù)
print('函數(shù)外部全局變量b=',b) # 在函數(shù)外部輸出全局變量
運(yùn)行結(jié)果如下:
函數(shù)外部全局變量b= 我愛Python,我在學(xué)習(xí)Python!
函數(shù)內(nèi)部全局變量b= 人生苦短,我用Pyhon!
函數(shù)外部全局變量b= 人生苦短,我用Pyhon!
>>>
從上面的結(jié)果可以看出,在函數(shù)的內(nèi)部也可以修改全局變量的值。但是,站長(zhǎng)在線在這里有一個(gè)提醒:
站長(zhǎng)在線提醒:雖然在Python里面可以讓全局變量和局部變量重名,但是,我們?cè)趯?shí)際開發(fā)中,盡量避免兩個(gè)變量重名,免得搞混、出錯(cuò)。
23.4、Python函數(shù)中的匿名函數(shù)
歡迎你來到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)Python知識(shí),本文學(xué)習(xí)的是《Python函數(shù)中的匿名函數(shù)詳解》。本文的主要內(nèi)容有:匿名函數(shù)的定義、匿名函數(shù)的表達(dá)式、匿名函數(shù)的注意點(diǎn)、匿名函數(shù)的優(yōu)點(diǎn)、匿名函數(shù)的應(yīng)用舉例。
23.4.1、匿名函數(shù)的定義
所謂匿名函數(shù)就是沒有名字的函數(shù),在Python中使用lambda表示創(chuàng)建匿名函數(shù)。
23.4.2、匿名函數(shù)的表達(dá)式
name = lambda [arg1 [,arg2,...,argn]]:expression
相關(guān)參數(shù)如下:
name:用于調(diào)用lambda表達(dá)式。
[arg1 [,arg2,...,argn]]:可選參數(shù),用于指定要傳遞的參數(shù)列表,多個(gè)參數(shù)間使用逗號(hào)“,”分隔。
expression:必選參數(shù),用于指定一個(gè)實(shí)現(xiàn)具體功能的表達(dá)式。如果有參數(shù),那么在該表達(dá)式中將應(yīng)用這些參數(shù)。
23.4.3、匿名函數(shù)的注意點(diǎn)
lambda 函數(shù)可以接收任意多個(gè)參數(shù) (包括可選參數(shù)) 并且返回單個(gè)表達(dá)式的值。lambda 函數(shù)不能包含命令,包含的表達(dá)式不能超過一個(gè)。
23.4.4、匿名函數(shù)的優(yōu)點(diǎn):
23.4.4.1、使用Python寫一些腳本時(shí),使用lambda可以省去定義函數(shù)的過程,讓代碼更加精簡(jiǎn)。
23.4.4.2、對(duì)于一些抽象的,不會(huì)被別的地方再重復(fù)使用的函數(shù),有時(shí)候函數(shù)起個(gè)名字也是個(gè)難題,使用lambda不需要考慮命名的問題
23.4.4.3、使用lambda在某些時(shí)候然后代碼更容易理解
示例:求一個(gè)兩個(gè)函數(shù)之和的函數(shù),普通的函數(shù)定義如下:
def add(x, y):
return x+ y
print(add(1,2))
運(yùn)行結(jié)果為:
3
>>>
使用匿名函數(shù)簡(jiǎn)化為:
add = lambda x,y:x+y
print(add(1,2))
運(yùn)行的結(jié)果為:
3
>>>
23.4.5、匿名函數(shù)的應(yīng)用舉例
在內(nèi)置函數(shù) max() 求最大值,min()求最小值, sort()排序,map() 映射, reduce 合并, filter() 過濾等經(jīng)常應(yīng)用到。
本文以使用lambda表達(dá)式實(shí)現(xiàn)對(duì)學(xué)生成績(jī)列表的排序?yàn)槔?,講解匿名函數(shù)的應(yīng)用。
列:定義一個(gè)保存學(xué)生成績(jī)的列表,每個(gè)學(xué)生的信息保存在一個(gè)字典中,根據(jù)學(xué)生的成績(jī)排序。
student = [
{'id': '001', 'name': '張三', '語文': 95, '數(shù)學(xué)': 98, '外語': 90},
{'id': '002', 'name': '李四', '語文': 90, '數(shù)學(xué)': 92, '外語': 88},
{'id': '003', 'name': '王五', '語文': 92, '數(shù)學(xué)': 93, '外語': 96},
{'id': '004', 'name': '趙六', '語文': 91, '數(shù)學(xué)': 90, '外語': 86}
] # 保存學(xué)生成績(jī)的列表
student.sort(key=lambda x :x['語文']+x['數(shù)學(xué)']+x['外語'],reverse = True)# 按總成績(jī)排序
for item in student: # 遍歷輸出排序結(jié)果
print(item)
運(yùn)行結(jié)果如下:
{'id': '001', 'name': '張三', '語文': 95, '數(shù)學(xué)': 98, '外語': 90}
{'id': '003', 'name': '王五', '語文': 92, '數(shù)學(xué)': 93, '外語': 96}
{'id': '002', 'name': '李四', '語文': 90, '數(shù)學(xué)': 92, '外語': 88}
{'id': '004', 'name': '趙六', '語文': 91, '數(shù)學(xué)': 90, '外語': 86}
>>>
到此為止,有關(guān)函數(shù)的相關(guān)知識(shí)就講解完成了。
本文地址:http://003188.cn/python23.html
阿里云虛擬主機(jī)1G空間,120元一年
香港、美國(guó)虛擬主機(jī)100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡