1.什么是返回值:
函數(shù)返回給函數(shù)調(diào)用者的值(概念)巫员;返回值就是return后面的值(語法);返回值就是函數(shù)調(diào)用表達式的值(獲取返回值)
2.return
1)什么是return:return是一個關(guān)鍵字,只能出現(xiàn)在函數(shù)體中
2)return的作用:a.結(jié)束函數(shù):執(zhí)行函數(shù)體的時候奢赂,一旦遇到return函數(shù)直接結(jié)束
b.將數(shù)據(jù)返回給函數(shù)調(diào)用者(將函數(shù)內(nèi)部的數(shù)據(jù)傳遞到函數(shù)外部):return
說明:看一個函數(shù)的返回值是什么膳灶,就看執(zhí)行的過程中有沒有遇到return轧钓,如果遇到return毕箍,
return后面的值就是函數(shù)的返回值
3)什么樣的數(shù)據(jù)應(yīng)該作為函數(shù)的返回值:
初學者:如果執(zhí)行完函數(shù)而柑,會產(chǎn)生新的數(shù)據(jù)媒咳,那么產(chǎn)生的新數(shù)據(jù)就可以返回伟葫,產(chǎn)生幾個返回幾個
return 返回值1,返回值2
4)怎么獲取函數(shù)返回值
獲取函數(shù)調(diào)用表達式的值就是獲取函數(shù)的返回值(函數(shù)調(diào)用表達式:調(diào)用函數(shù)的語句)
3.函數(shù)調(diào)用過程
(1)回到函數(shù)聲明的位置
(2)傳參渐溶,用實參給形參賦值(傳參必須保證每個參數(shù)都有值)
(3)執(zhí)行函數(shù)體
(4)執(zhí)行完函數(shù)體茎辐,先確定函數(shù)返回值
(函數(shù)結(jié)束:a.執(zhí)行完函數(shù)體的最后一條語句弛槐;b.執(zhí)行過程中遇到return)
(怎么確定返回值:看一個函數(shù)的返回值是什么乎串,就看執(zhí)行的過程中有沒有遇到return叹誉,如果遇到return长豁,
return后面的值就是函數(shù)的返回值)
(5)回到函數(shù)調(diào)用的位置(這個時候函數(shù)調(diào)用表達式的值才是函數(shù)的返回值),接著往后執(zhí)行
調(diào)用函數(shù)的目的:執(zhí)行函數(shù)體酸舍,獲取返回值
4.函數(shù)調(diào)用過程的內(nèi)存變化
函數(shù)的調(diào)用過程其實是一個壓棧的過程:每次調(diào)用函數(shù)的時候系統(tǒng)都會自動的在內(nèi)存中專門為這個
函數(shù)開辟一個內(nèi)存空間,用來保存在函數(shù)中聲明的變量(形參也是聲明在函數(shù)中的變量)
當函數(shù)調(diào)用結(jié)束的時候,這個內(nèi)存區(qū)域會自動釋放
5.匿名函數(shù)的聲明
匿名函數(shù)的本質(zhì)還是函數(shù)斥难,普通函數(shù)中除了聲明的語法其他的都適用于匿名函數(shù)
(1)語法:
函數(shù)名 = lambda 參數(shù)列表:返回值
(2)說明
lambda - 關(guān)鍵字,固定寫法
參數(shù)列表 - 形參列表,以參數(shù)名1暑劝,參數(shù)名2,...傅联,參數(shù)名n
: - 固定
返回值 - 寫任何有結(jié)果的表達式都可以
注意:匿名函數(shù)的函數(shù)體只有一條語句,而且這條語句的結(jié)果就是函數(shù)的返回值(不需要return)
(3)什么時候使用匿名函數(shù)
a.函數(shù)的功能一行代碼就可以實現(xiàn)
b.函數(shù)的功能不會重復(fù)使用
a = 10
print(type(a)) # <class 'int'>
sum1 = lambda num1, num2: num1+num2
print(type(sum1)) # <class 'function'>
print(sum1(29, 29)) # 58
print(sum1(num2=10, num1=12))
print('***********************************************************')
# 練習:寫一個匿名函數(shù),兩個數(shù)中的最大值
max1 = lambda x, y: x if x > y else y
print(max1(5, 7))
# 補充:python中的三目運算符
c語言中:條件語句?值1:值2 - 如果條件語句結(jié)果為True,整個表達式的結(jié)果是值1论皆,否則是值2
python:值1 if 條件語句 else 值2 - 如果條件語句結(jié)果為True,整個表達式的結(jié)果是值1粒督,否則是值2
6.什么是作用域
聲明完變量后闰挡,這個變量能夠使用的范圍就是變量的作用域
7.全局變量和局部變量
(1)全局變量:聲明在函數(shù)或者類外面的變量都是全局變量
全局變量的作用域:從聲明開始到整個文件結(jié)束
(2)局部變量:聲明在函數(shù)中的變量就是局部變量
局部變量的作用域:從聲明開始到整個函數(shù)結(jié)束
a = 100 # a是全局變量
print('外部', a)
for _ in range(3):
print('循環(huán)中', a)
def func1():
print('函數(shù)中', a)
func1()
print('============x是全局變量溪北,y是全局變量===================')
for x in range(4):
print('循環(huán)體', x)
y = 100
print('外部', x)
def func2():
print('函數(shù)中', x)
func2()
print('=================局部變量===================')
def func3(aa):
print('函數(shù)中', aa)
def func33():
print('函數(shù)中sss', aa)
func33()
func3('abc')
# print(aa) # name 'aa' is not defined
8.global和nonlocal
這兩個關(guān)鍵字只能在函數(shù)體中使用
(1)global:在函數(shù)聲明一個全局變量(去修改一個全局變量的值)
global 變量名
變量名 = 值
(2)nonlocal:在局部的局部中去修改局部變量的值
nonlocal 變量名
變量名 = 值