python的這四大函數(shù)類型得牢記(變量,引用,匿名,遞歸)
python的這四大函數(shù)類型得牢記(變量,引用,匿名,遞歸)
四大函數(shù)類型
局部和全局變量
引用
匿名函數(shù)
遞歸

一. 局部和全局變量
1、局部變量
(1)含義:就是在函數(shù)內(nèi)部定義的變量(作用域僅僅局限在函數(shù)的內(nèi)部)不同的函數(shù)可以定義相同的局部變量,但是各自用各自的 不會(huì)產(chǎn)生影響
(2)作用:為了臨時(shí)的保存數(shù)據(jù) 需要在函數(shù)中定義來進(jìn)行存儲(chǔ)
2、全局變量:可以被所有函數(shù)調(diào)用
3、突發(fā)情況
當(dāng)全局變量和局部變量出現(xiàn)重復(fù)定義的時(shí)候,程序會(huì)優(yōu)先執(zhí)行使用函數(shù)內(nèi)部定義的變量(地頭蛇)
如果在函數(shù)的內(nèi)部要想對(duì)全局變量進(jìn)行修改的話 必須使用global 關(guān)鍵字進(jìn)行聲明
對(duì)于可變類型(dict、list)來講,全局變量要想在函數(shù)中修改的話,我們不需要用global關(guān)鍵字去聲明的(因?yàn)閷?duì)象的內(nèi)存地址不會(huì)改變)
4、代碼演示
c=3#c為全局變量,可以被所有函數(shù)調(diào)用
a=2
def Test():
b=2#b為局部變量,只能在函數(shù)內(nèi)被調(diào)用
global a#局部變量變?yōu)槿肿兞?/p>
a=4
print('{}'.format(a))
pass
def
Test2():
c=4
print('{}'.format(c))
pass Test2()
print(c)#c沒有發(fā)生改變說明全局變量在函數(shù)中無法修改
Test()
print(a)#a發(fā)生了改變說明聲明全局變量 后才可以修改
# 可變類型列表,字典 dict list,可以在函數(shù)中修改
listA=[]
print(type(listA))
def demoList():
listA.append('python')#向空列表里面添加數(shù)據(jù)
pass
demoList() print(listA)#發(fā)現(xiàn)輸出數(shù)據(jù)了
# 不可變類型str tuple number【int、float、complex】

二. 引用
在python中,值是靠引用來傳遞來的,可以用id()查看一個(gè)對(duì)象的引用是否相同,id是值保存在內(nèi)存中那塊內(nèi)存地址的標(biāo)識(shí)。
可變類型列表和字典:函數(shù)調(diào)用全局變量后地址不會(huì)變化
代碼演示
li=[]
print('原來的地址{}'.format(id(li)))
def Test(n):
li.append([1,3,'chen'])
print(id(n))
print('內(nèi)部的{}'.format(n))
pass
print(id(li))
Test(li)#輸出我們發(fā)現(xiàn)地址是一樣的
print('外部的變量對(duì)象{}'.format(li))
#不可變類型
a=1
def func(x):
print('x剛開始的地址{}'.format(id(x)))
x=2
print('x的值修改之后地址{}'.format(id(x)))#改變類型后地址發(fā)生了變化
print(x)
pass
#調(diào)用函數(shù)
print('a的地址:{}'.format(id(a)))
func(a)
print(a)

三. 匿名函數(shù)
1、介紹:使用lambda關(guān)鍵字去創(chuàng)建函數(shù)
沒有名字的函數(shù)
2、匿名函數(shù)冒號(hào)后面的表達(dá)式有且只有一個(gè)
注意:是表達(dá)式,而不是語句
3、自帶return,而這個(gè)return的結(jié)果就是表達(dá)式計(jì)算后的結(jié)果
4、缺點(diǎn):lambda只能是單個(gè)表達(dá)式,不是一個(gè)代碼塊,lambda的設(shè)計(jì)就是為了滿足簡(jiǎn)單函數(shù)的場(chǎng)景
僅僅能封裝有限的邏輯,復(fù)雜邏輯實(shí)現(xiàn)不了,必須使用def來處理
5、代碼演示
M=lambda x,y:x+y
print(M(2,3))#M相當(dāng)于一個(gè)調(diào)用函數(shù)
#可以使用if-else語句,三元運(yùn)算
Test=lambda x,y:x if x>y else y#意思就是調(diào)用x和y兩個(gè)變量,如果x大于y就取x否則取y
print(Test(2,3))
# 也可以單個(gè)參數(shù)使用
Test=lambda x:(x**2)
print(Test(10))

四. 遞歸
簡(jiǎn)單理解:自己調(diào)用自己
必須有一個(gè)明確的結(jié)束條件
優(yōu)點(diǎn):邏輯簡(jiǎn)單、定義簡(jiǎn)單
缺點(diǎn):容易導(dǎo)致棧溢出,內(nèi)存資源緊張,甚至內(nèi)存泄漏
下列代碼是求階乘:以循環(huán)的方式去實(shí)現(xiàn)
def jiecheng(n):
result=1
for item in range(1,n+1):# range左閉右開,所以要加一 result*=item
pass
return result
print(jiecheng(5))
# 遞歸的方式實(shí)現(xiàn)
def factorial (n):
if n == 1:
return 1
return n * factorial (n-1)
print(factorial(5))
———————————————
本文轉(zhuǎn)載:CSDN博主「神的孩子都在歌唱」的原創(chuàng)文章
原文鏈接:
https://blog.csdn.net/weixin_46654114/article/details/116379272
一鍵三連~~
關(guān)注小編喲~
