調(diào)用python內(nèi)置函數(shù)
- 函數(shù)名(參數(shù)) 即可調(diào)用python內(nèi)置函數(shù)
- help(函數(shù)名) 返回python對(duì)于函數(shù)的幫助文件
- 函數(shù)別名
- 我們可以把一個(gè)變量指向一個(gè)函數(shù),其意義就是給函數(shù)起了一個(gè)別名
>>>a=abs
>>>abs(-1)
>>>1
>>>a(-1)
>>>1
- 數(shù)據(jù)類型轉(zhuǎn)換
- Python數(shù)據(jù)類型主要分為4類
- 整數(shù)/浮點(diǎn)數(shù)/字符/布魯爾
- 轉(zhuǎn)整數(shù) ->int('123')->123 int('0xa',16)->10(16進(jìn)制轉(zhuǎn)10進(jìn)制)
- 轉(zhuǎn)浮點(diǎn)數(shù) ->float(12)->12.0
- 轉(zhuǎn)字符串 ->str(123)->'123'
-轉(zhuǎn)布魯爾 ->bool(2)->'True' bool('')->'False'
定義函數(shù)
def my_abs(x):
if x>=0:
return x
else:
return -x
>>>my_abs(5)
>>>5
>>>my_abs(-2)
>>>2
- 定義的函數(shù)保存 放在 Lib\site-packages\mytest.py
- from mytest import my_abs 即可直接調(diào)用我們自定義的函數(shù)
- 定義函數(shù)中 pass 即與 return 相反埋虹, 不返回任何值
def nop():
pass#不返回任何值
def my_abs(x):
if isinstance(x,(int,float)):#判斷x是否為元組(int,float)的數(shù)據(jù)類型
raise TypeError('bad operand type')# raise 引發(fā)TypeError
if x>=0:
return x
else:
return -x
def my_chiose(x,y):
list1=[x,y]
for ls in list1:
if not isinstance(ls,(int,float)):
raise TypeError('Bad operand Type')
if x+y>=0:
return x+y,'非負(fù)數(shù)'
else:
return x+y,'負(fù)數(shù)'
#返回結(jié)果是一個(gè)元組
>>>my_chiose(-1,0)
>>>(-1, '負(fù)數(shù)')
>>>my_chiose(1,0)
>>>1, '非負(fù)數(shù)')
函數(shù)參數(shù)
def l(x,y):
print(x,y)
>>>l(1,2)
>>>1,2
- 在位置參數(shù)中扑馁,調(diào)用函數(shù)需要在制定位置放入?yún)?shù)憎乙,不能省略
- 默認(rèn)參數(shù)
- 在默認(rèn)參數(shù)中队秩,給某個(gè)參數(shù)一個(gè)指定值庄涡,當(dāng)調(diào)用函數(shù)的時(shí)候如果不給默認(rèn)參數(shù)賦值,那么函數(shù)將使用默認(rèn)參數(shù)的指定對(duì)象
def l(x,y=1):
print(x,y)
>>>l(1)
>>>1,2
>>>l(1,3)
>>>1,3
- 如果默認(rèn)參數(shù)指定的對(duì)象可變题禀,在函數(shù)內(nèi)部改變參數(shù)的指向?qū)ο髸r(shí)候鞋诗,下一次調(diào)用默認(rèn)參數(shù)的時(shí)候,默認(rèn)參數(shù)會(huì)調(diào)用最新的對(duì)象
def l(l1=[]):
l1.append('end')
>>> return l1
>>>l
>>>('end')
>>>l
>>>('end','end')
- 可變參數(shù)
- 當(dāng)參數(shù)數(shù)量不確定的時(shí)候迈嘹,在參數(shù)前面加*號(hào)代表可變參數(shù)削彬,可變參數(shù)的實(shí)質(zhì)是一個(gè)元組,使用函數(shù)的時(shí)候在參數(shù)前面加上*,意思把參數(shù)作為可變參數(shù)傳遞給函數(shù),而不是一個(gè)
def l(*z):
return z
>>>l(1)
>>>(1,)
>>>l(1,2,3)
>>>(1,2,3)
#
>>>num=(1,2)
>>>l(num)
>>>((1,2),)
#
>>>l(*num)
>>>(1,2)
- 關(guān)鍵字參數(shù)
- 類似于可變參數(shù)江锨,但是參數(shù)的實(shí)質(zhì)是一個(gè)dict吃警,可以接受多個(gè)參數(shù)糕篇,但是參數(shù)的形式需要寫為 key=value,在使用函數(shù)的時(shí)候把dict加上**啄育,意思把參數(shù)作為關(guān)鍵字參數(shù)傳遞給函數(shù)
def l(**z):
return(z)
>>>l()
>>>{}
>>>l(a=1)
>>>{'a':1}
>>>l(a=1,b=2)
>>>{'a':1,'b':2}
>>>l(**{'a':1,'b':2})
>>>{'a':1,'b':2}
- 命名關(guān)鍵字參數(shù)
- 如果使用函數(shù)的的時(shí)候需要指定參數(shù)名就需要在參數(shù)前面加上*,如果有可變參數(shù)可以用可變參數(shù)代替*的位置
def l(x,*,y)
print(x,y)
>>>l(1,2)
>>>TypeError: l() takes 1 positional argument but 2 were given
>>>l(1)
>>>TypeError: l() missing 1 required keyword-only argument: 'y'
>>>l(1,y=2)
>>>1,2
def l(x,*z,y)
print(x,y=1)
- 組合參數(shù)
- 順序 必選參數(shù),默認(rèn)參數(shù)拌消,可變參數(shù)(元組)挑豌,命名關(guān)鍵字參數(shù)安券,關(guān)鍵字參數(shù){dict}
def l(a,b=1,*c,d,**e):
return(a,b,c,d,e)
>>>l(2,d=3)
>>>(2, 1, (), 3, {})
遞歸函數(shù)
- 如果一個(gè)函數(shù)在內(nèi)部調(diào)用自己本身,這個(gè)函數(shù)就是遞歸函數(shù)
- 例如:fact(n)=n!=1*2*3*1*……*n=fact
(n-1)*n
def fact(n):
if n==1:
return 1
else:
return n*fact(n-1)
- 使用遞歸函數(shù)需要防止棧溢出氓英,在遞歸的時(shí)候如果要完成當(dāng)前結(jié)果侯勉,就需要調(diào)用下次結(jié)果才能實(shí)現(xiàn),就會(huì)一直鑲嵌調(diào)用铝阐,直到調(diào)用到最后一個(gè)不需要遞歸的時(shí)候址貌,然后反向一層一層的反饋結(jié)果,返回包含表達(dá)式
- 例如fact(5)=5*(4*(3*(2*fact(1))))
- 尾遞歸優(yōu)化
- 尾遞歸優(yōu)化就是就是把return里面沒有直接表達(dá)式徘键,把計(jì)算放進(jìn)函數(shù)的參數(shù)里面
def fact(n,rs=1):
if n==1:
return rs
else:
return fact(n-1,n*rs)```