一 復(fù)習(xí)
1.函數(shù)的定義: 函數(shù)就是對實現(xiàn)某一特定功能的代碼段的封裝
2.函數(shù)的聲明:
def 函數(shù)名(形參列表):
函數(shù)體
注意: 1.python中不支持函數(shù)的重載(名字相同的函數(shù)只能有一個)
2.聲明函數(shù)的時候函數(shù)體不會執(zhí)行
3.函數(shù)的調(diào)用
函數(shù)名(實參列表)
(重點!)函數(shù)的調(diào)用過程:
1) 回到函數(shù)聲明的位置
2) 傳參
3) 執(zhí)行函數(shù)體
4) 指定完函數(shù),確定函數(shù)返回值
怎么確定返回值: 看執(zhí)行完函數(shù)有沒有遇到return,如果遇到return后面的值就是函數(shù)返回值,否則就是None
5) 回到函數(shù)調(diào)用的位置,接著往后執(zhí)行。(這個時候函數(shù)調(diào)用表達式的值就是函數(shù)的返回值)
4.函數(shù)的參數(shù)
1)位置參數(shù)和關(guān)鍵字參數(shù)(位置參數(shù)要在關(guān)鍵字參數(shù)前)
2)參數(shù)默認值 (沒有默認值的參數(shù)要放在前面)
3)函數(shù)中參數(shù)和返回值類型說明
4)不定長參數(shù)
*參數(shù)名, **參數(shù)名
5.返回值
1)怎么確定返回值: 看return
2)怎么獲取返回值: 使用函數(shù)調(diào)用表達式
二 匿名函數(shù)
1.什么是匿名函數(shù)
匿名函數(shù)就是沒有名字的函數(shù)
1)語法
lambda 參數(shù)列表:返回值2)說明
lambda - 關(guān)鍵字
參數(shù)列表 - 相當(dāng)于普通函數(shù)的形參列表, 變量1,變量2,...
: - 固定寫法
返回值 - 相當(dāng)于普通函數(shù)函數(shù)體中的return語句??梢允浅速x值語句以外的任何語句
注意:1.匿名函數(shù)本質(zhì)還是函數(shù),之前函數(shù)中將的語法絕大多數(shù)都適用(通過類型名對參數(shù)類型說明不支持的)
2.匿名函數(shù)能做的事情,普通函數(shù)都可以做。只是匿名函數(shù)簡潔
應(yīng)用 1.適用匿名函數(shù)求兩個數(shù)的和
應(yīng)用一
func = lambda x, y=20: x+y
print(func(10, 20))
print(func(y=10, x=20))
print(func(10))
func1 = lambda *num: sum(num)
print(func1(1, 2, 3))
應(yīng)用二
students = [
{'name': '張三', 'age': 19},
{'name': '李四', 'age': 23},
{'name': '王五', 'age': 18},
]
# func1 = lambda x:x['age']
students.sort(key = lambda x:x['age'])
print(students)
print('============匿名函數(shù)就是函數(shù)的值的理解=============')
10 # int的值
a = 10
print(a*10/20)
print(type(a))
'abc' # str的值
str1 = 'abc'
print(str1[0], str1*2)
print(type(str1))
[10, 39, 90] # list的值
list1 = [10, 39, 90]
list1.append(100)
print(type(list1))
{'a': 10, 'b': 100} # dict的值
dict1 = {'a': 10, 'b': 100}
print(dict1['a'])
print(type(dict1))
lambda x, y: x+y # function的值
func1 = lambda x, y: x+y
print(type(func1))
list2 = [10, 'abc', [1, 2], {'a': 10}, lambda x: x*2]
print(list2)
三變量及作用域
1.變量的作用域
- 指的就是變量的使用范圍
2.全局變量、局部變量
- 1)全局變量: 沒有聲明在函數(shù)中的變量都是全局變量, 全局變量的作用域是從變量聲明開始到整個py文件結(jié)束
- 2)局部變量: 聲明在函數(shù)中的變量都是局部變量, 作用域是從變量聲明到函數(shù)結(jié)束
注意: 形參也是局部變量
當(dāng)在調(diào)用函數(shù)的實習(xí),系統(tǒng)會自動的在內(nèi)存的棧區(qū)間為這個函數(shù)開辟一個獨立的內(nèi)存區(qū)域,
用來保存在函數(shù)中聲明的變量或者產(chǎn)生的數(shù)據(jù)。當(dāng)函數(shù)調(diào)用結(jié)束后,這塊內(nèi)存區(qū)域會自動銷毀
print('================全局變量=================')
a = 10 # a是全局變量
if True:
print('if:', a)
for x in range(4):
print('for:', a)
def func1():
print('函數(shù):', a)
func1()
# num 全局變量
"""
num = 0
num = 1
num = 2
"""
for num in range(3):
temp = 100 # temp是全局變量
print(num)
if 3 > 2:
temp2 = 200 # temp2是全局變量
print('循環(huán)外:', num, temp, temp2)
def func2():
print('函數(shù)里:', num, temp, temp2)
func2()
print('====================局部變量=================')
def func3(xx):
yy = 100
print('函數(shù)中', xx, yy)
func3(10)
# print(xx) # NameError: name 'xx' is not defined
# print(yy) # NameError: name 'yy' is not defined
# 3.global和nonlocal
"""
1)global - 在函數(shù)聲明一個全局變量(只能在函數(shù)中使用)
global 變量名
變量名 = 值
2)nonlocal - 想要在局部的局部中去修改一個局部變量的值,就使用nonlocal