01-recode
1.字典
增:字典[key] = 值 漆枚; 字典.setdefault(key,值) 怎燥;字典.update(字典1)
刪 : del 字典[key] 荠锭; 字典.pop(key)
2.集合 - 無(wú)序呼股,可變
查 - 遍歷
增 - 集合.add(元素)耕魄;集合.updata(序列)
刪 - 集合.remove(元素)
數(shù)學(xué)集合元算:包含(>= , <=)、并集(|)彭谁、交集(&)吸奴、差集(-)、補(bǔ)集(^)
3.函數(shù):就是對(duì)實(shí)現(xiàn)某一特定功能的代碼段的封裝
a.函數(shù)的聲明
def 函數(shù)名(形參列表):
函數(shù)說(shuō)明文檔
函數(shù)體
b.函數(shù)的調(diào)用
函數(shù)名(實(shí)參列表)
02-函數(shù)的調(diào)用
1.函數(shù)的調(diào)用過(guò)程(重點(diǎn))
函數(shù)在聲明的時(shí)候不會(huì)執(zhí)行函數(shù)體缠局,只有在調(diào)用函數(shù)的時(shí)候才會(huì)執(zhí)行函數(shù)體
a.物理過(guò)程
第一步:回到函數(shù)聲明的位置
第二步:用實(shí)參給形參賦值(傳參)
傳參一定要保證每個(gè)形參都有值
第三步:執(zhí)行函數(shù)體
第四步:獲取返回值
第五步:回到函數(shù)調(diào)用的位置则奥,接著往后執(zhí)行
b.函數(shù)調(diào)調(diào)用的過(guò)程是一個(gè)壓棧的過(guò)程
當(dāng)函數(shù)調(diào)用的時(shí)候,系統(tǒng)會(huì)自定的在內(nèi)存中棧區(qū)間開(kāi)辟空間狭园,存儲(chǔ)函數(shù)調(diào)用過(guò)程中產(chǎn)生的數(shù)據(jù)
(這兒的數(shù)據(jù)包括參數(shù)和在函數(shù)的聲明的變量)读处。當(dāng)函數(shù)調(diào)用完成后,對(duì)應(yīng)的內(nèi)存空間會(huì)自動(dòng)銷毀
def say_hello(name):
print('hello')
say_hello('小明')
a = 10
b = 20
def change(a,b):
a,b = b ,a
print(a,b)
change(a,b)
print(a,b)
03-函數(shù)的參數(shù)
1.根據(jù)實(shí)參分為位置參數(shù)和關(guān)鍵字參數(shù)
a.位置參數(shù)
實(shí)參的位置和形參的位置一一對(duì)應(yīng)
b.關(guān)鍵字參數(shù)
實(shí)參以"形參名 = 值"的形式來(lái)傳參
c.位置參數(shù)和關(guān)鍵字參數(shù)混合使用
前提 :保證每個(gè)參數(shù)都有值唱矛;位置參數(shù)要在關(guān)鍵字參數(shù)的前面
def func1(a,b,c):
print('a:%d b:%d c:%d'%(a,b,c))
func1(10,20,100)
func1(c = 100,b =20 ,a=10)
func1(10,c=100,b=20)
2.從函數(shù)聲明的角度又有:參數(shù)默認(rèn)值罚舱,不定長(zhǎng)參數(shù),參數(shù)類型說(shuō)明
a.參數(shù)默認(rèn)值
聲明函數(shù)的時(shí)候可以給參數(shù)設(shè)置默認(rèn)值绎谦,語(yǔ)法:參數(shù)名 = 默認(rèn)值
如果函數(shù)聲明的時(shí)候參數(shù)有默認(rèn)值管闷,調(diào)用函數(shù)的時(shí)候,有默認(rèn)值得參數(shù)可以不用賦值
如果有的參數(shù)有默認(rèn)值窃肠,有的參數(shù)沒(méi)有默認(rèn)值包个;有默認(rèn)值的參數(shù)一定要放在沒(méi)有默認(rèn)值參數(shù)后面
注意:設(shè)置默認(rèn)值除了可以給參數(shù)一個(gè)默認(rèn)值,也可以對(duì)參數(shù)的類型進(jìn)行說(shuō)明
def func2(a=1,b=2,c=3):
print('a:%d b:%d c:%d' % (a, b, c))
func2(10,20,30)
func2()
3.不定長(zhǎng)參數(shù)
不定長(zhǎng)參數(shù):聲明函數(shù)的時(shí)候冤留,函數(shù)的參數(shù)不確定
a.在聲明函數(shù)的時(shí)候赃蛛,參數(shù)名前加一個(gè)*,會(huì)將這個(gè)參數(shù)編程元祖搀菩,來(lái)獲取多個(gè)實(shí)參的值(通過(guò)位置參數(shù)傳參)
調(diào)用參數(shù)是不定長(zhǎng)參數(shù)的函數(shù)的時(shí)候呕臂,不定長(zhǎng)參數(shù)對(duì)應(yīng)的位置,可以傳任意個(gè)實(shí)參
b.在聲明函數(shù)的時(shí)候肪跋,參數(shù)名前加**歧蒋,會(huì)將參數(shù)變成字典,來(lái)獲取多個(gè)實(shí)參的中(必須使用關(guān)鍵字參數(shù))
如果是調(diào)用不定長(zhǎng)關(guān)鍵字參數(shù)(參數(shù)名前加**),調(diào)用的時(shí)候關(guān)鍵字可以隨便命名
c.在聲明函數(shù)時(shí)候谜洽,參數(shù)名前加和*一起使用萝映,用來(lái)表示不定長(zhǎng)參數(shù),
調(diào)用的時(shí)候更靈活阐虚,可以用位置參數(shù)傳參序臂,也可以用關(guān)鍵字傳參
要求:一顆參數(shù)要放在兩顆參數(shù)的前面
4.參數(shù)類型說(shuō)明
參數(shù)類型說(shuō)明,只是對(duì)參數(shù)類型進(jìn)行提示实束,不能限制參數(shù)的類型
a.設(shè)置默認(rèn)值
b.參數(shù)名:類型名
注意:類型除了說(shuō)明類型以外奥秆,還可以做相應(yīng)類型對(duì)應(yīng)的語(yǔ)法提示
# 聲明一個(gè)函數(shù),功能是求多個(gè)數(shù)的和
def my_sum(*num):
print(num,type(num))
my_sum(1,2,3,4,5,6,7)
my_sum()
def fun5(**num):
print(num)
fun5(a=1,b=2,c=3)
def fun6(a,**b):
print(a,b)
fun6('abc',x=10,y=20)
def func7(*args,**kwargs):
print(args,kwargs)
func7(8,9,10,29)
func7(a=10,b=20)
func7()
func7(1,2,3,x=10,y=20)
# 練習(xí):求多個(gè)數(shù)的和咸灿,齊奧球調(diào)用函數(shù)的時(shí)候可以多樣性(位置构订、關(guān)鍵字)
def my_sum(*args,**kwargs):
sum1 = 0
for x in kwargs:
sum1 = sum1+ kwargs[x]
for item in args:
sum1 += item
print(sum1)
my_sum(1,2,3,4,a=1,b=2)
def fun8(a:int,b=''):
print(a,b)
fun8(10,'abc')
fun8([1,2,3],12)
04-函數(shù)的返回值
1.返回值
a.函數(shù)的返回值就是return關(guān)鍵值后面表達(dá)式的值,就是函數(shù)調(diào)用表達(dá)式的值
b.python中所有的函數(shù)都有返回值避矢,默認(rèn)是None
return - 關(guān)鍵字:
1.返回返回值
2.結(jié)束函數(shù)(當(dāng)函數(shù)在執(zhí)行的過(guò)程中遇到了return悼瘾,函數(shù)直接結(jié)束) , 如果函數(shù)體中沒(méi)有return,函數(shù)會(huì)在函數(shù)體執(zhí)行完成后將None作為返回值
函數(shù)調(diào)用表達(dá)式 - 調(diào)用函數(shù)的語(yǔ)句审胸;當(dāng)函數(shù)調(diào)用完成后亥宿。函數(shù)調(diào)用表達(dá)式的結(jié)果就是返回值
看一個(gè)函數(shù)的返回值,永遠(yuǎn)只看是否遇到return砂沛,遇到了就是return后面的值箩绍,遇不到就是None
返回值的作用:就是將在函數(shù)內(nèi)部產(chǎn)生的數(shù)據(jù),傳遞到函數(shù)外面尺上,防止在函數(shù)調(diào)用完成后被銷毀
什么時(shí)候使用返回值:如果實(shí)現(xiàn)函數(shù)的功能會(huì)產(chǎn)生新的數(shù)據(jù)材蛛,一般都會(huì)將這個(gè)數(shù)據(jù)返回
def func1(m,n):
print(m,n)
return 100 # 將100作為函數(shù)func1的返回值
def func2(m,n):
return m+n # m+n 的結(jié)果就是返回值
def func3(m,n):
return None #None作為返回值,在這兒結(jié)束怎抛。函數(shù)體后面的其他語(yǔ)句不會(huì)執(zhí)行
print(m,n)
def func4():
print('hello')
print(func4())
2.同時(shí)返回多個(gè)值
python的函數(shù)支持返回多個(gè)值
return 返回值1卑吭,返回值2,返回值3... : 實(shí)質(zhì)是以元祖的形式返回
# 寫(xiě)一個(gè)函數(shù)求多個(gè)數(shù)的和以及平均值
def average_sum(*n):
sum1 = sum(n)
average = sum1 / len(n)
return sum1,average
print(average_sum(1,2,3,4,5,6))
05-返回值的應(yīng)用
返回值能做的事情马绝,函數(shù)調(diào)用表達(dá)式都可以做
# 1.用函數(shù)調(diào)用表達(dá)式給變量賦值
def fun1():
return 'hello'
str1 =fun1()
print(str1)
2.通過(guò)函數(shù)調(diào)用表達(dá)式使用相應(yīng)的方法
def fun2():
return [1,2]
item = fun2()[0]
item = fun2().append(3)
print(item) #item獲取的append函數(shù)的返回值豆赏,append函數(shù)沒(méi)有返回值
# 3.將函數(shù)調(diào)用表達(dá)式作為容器的元素,函數(shù)的參數(shù)富稻,函數(shù)的返回值
def fun3():
return 100
print(fun3()+3) #print(100+3)
list2 = [fun3(),'abc']
print('list2:',list2)#作為列表元素
dict = {fun3():fun3()}#作為字典的key和value
def fun4(m):
print(m)
return fun3()#作為函數(shù)的返回值
re = fun4(fun3())
print(re)#作為實(shí)參
06-匿名函數(shù)
匿名函數(shù)還是函數(shù)掷邦,除了聲明的語(yǔ)法以外,函數(shù)其他的語(yǔ)法椭赋,匿名函數(shù)都支持
1.匿名函數(shù)的聲明
a.語(yǔ)法:
函數(shù)名 = lambda 參數(shù)列表:返回值
b.說(shuō)明:
函數(shù)名 - 變量名
lambda - 關(guān)鍵字
參數(shù)列表 - 和普通函數(shù)的參數(shù)列表的作用和要求一樣
返回值 - 相當(dāng)于普通函數(shù)return關(guān)鍵字后面的表達(dá)式
注意:匿名函數(shù)中冒號(hào)后面的語(yǔ)句屬于函數(shù)體抚岗。在聲明的時(shí)候不會(huì)執(zhí)行
匿名函數(shù)的調(diào)用和普通函數(shù)一模一樣
# 用匿名函數(shù)求兩個(gè)數(shù)的和
my_sum = lambda num1 ,num2 :num1 +num2
print(my_sum(1,2))
# 寫(xiě)一個(gè)匿名函數(shù):求兩個(gè)數(shù)的最大值
max_number = lambda num1 ,num2 :max(num1,num2)
num3=max_number(1,20)
print(num3)
2.補(bǔ)充:python中的三目運(yùn)算符
a.
c中的三目運(yùn)算符:條件語(yǔ)句?值1:值2 - 條件語(yǔ)句為T(mén)rue哪怔,整個(gè)表達(dá)式的結(jié)果是值1宣蔚,否則是值2
b.
python 中的三目運(yùn)算符:值1 if 條件語(yǔ)句 else 值2
x = 10
y = 20
max1 = x if x > y else y
# 寫(xiě)一個(gè)匿名函數(shù):求兩個(gè)數(shù)的最大值
max_number = lambda num1 ,num2 :num1 if num1 > num2 else num2
num3=max_number(21,20)
print(num3)
# 寫(xiě)一個(gè)匿名函數(shù)向抢,獲取字典中指定的key對(duì)應(yīng)的值
values = lambda dict1,key :dict1[key]
print(values({'a':100,'b':200},'a'))