要調(diào)用一個(gè)函數(shù),需要知道函數(shù)的名稱(chēng)和參數(shù)筝蚕,比如求絕對(duì)值的函數(shù)abs锄列,只有一個(gè)參數(shù)∥锱纾可以直接從Python的官方網(wǎng)站查看文檔:
http://docs.python.org/3/library/functions.html#abs
函數(shù)名其實(shí)就是指向一個(gè)函數(shù)對(duì)象的引用卤材,完全可以把函數(shù)名賦給一個(gè)變量,相當(dāng)于給這個(gè)函數(shù)起了一個(gè)“別名”
a = abs#變量a指向了abs函數(shù)
print(a(-3))
十六進(jìn)制轉(zhuǎn)換
n1 = 255
print(hex(n1))
在Python中峦失,定義一個(gè)函數(shù)要使用def語(yǔ)句扇丛,依次寫(xiě)出函數(shù)名、括號(hào)尉辑、括號(hào)中的參數(shù)和冒號(hào):帆精,然后,在縮進(jìn)塊中編寫(xiě)函數(shù)體隧魄,函數(shù)的返回值用return語(yǔ)句返回卓练。
def my_abs(x):
if x >=0:
return x
else:
return -x
print(my_abs(6))
空函數(shù)
如果想定義一個(gè)什么事也不做的空函數(shù),可以用pass語(yǔ)句:
def nop():
pass
pass語(yǔ)句什么都不做购啄,那有什么用襟企?實(shí)際上pass可以用來(lái)作為占位符,比如現(xiàn)在還沒(méi)想好怎么寫(xiě)函數(shù)的代碼闸溃,就可以先放一個(gè)pass整吆,讓代碼能運(yùn)行起來(lái)。
pass還可以用在其他語(yǔ)句里辉川,比如:
if age >= 18:
pass
缺少了pass表蝙,代碼運(yùn)行就會(huì)有語(yǔ)法錯(cuò)誤
函數(shù)返回多個(gè)值:
import math#導(dǎo)入math包
def move(x,y,step,angele = 0):
nx = x + step * math.cos(angele)
ny = y - step * math.sin(angele)
return nx , ny
print(move(25,26,45))
定義函數(shù)時(shí),需要確定函數(shù)名和參數(shù)個(gè)數(shù)乓旗;
如果有必要府蛇,可以先對(duì)參數(shù)的數(shù)據(jù)類(lèi)型做檢查;
函數(shù)體內(nèi)部可以用return隨時(shí)返回函數(shù)結(jié)果屿愚;
函數(shù)執(zhí)行完畢也沒(méi)有return語(yǔ)句時(shí)汇跨,自動(dòng)return None务荆。
函數(shù)可以同時(shí)返回多個(gè)值,但其實(shí)就是一個(gè)tuple
設(shè)置默認(rèn)參數(shù)時(shí)穷遂,有幾點(diǎn)要注意:
一是必選參數(shù)在前函匕,默認(rèn)參數(shù)在后,否則Python的解釋器會(huì)報(bào)錯(cuò)(思考一下為什么默認(rèn)參數(shù)不能放在必選參數(shù)前面)蚪黑;
二是如何設(shè)置默認(rèn)參數(shù)盅惜。
當(dāng)函數(shù)有多個(gè)參數(shù)時(shí),把變化大的參數(shù)放前面忌穿,變化小的參數(shù)放后面抒寂。變化小的參數(shù)就可以作為默認(rèn)參數(shù)。
使用默認(rèn)參數(shù)有什么好處掠剑?最大的好處是能降低調(diào)用函數(shù)的難度屈芜。
默認(rèn)函數(shù)參數(shù)的使用
def setInfo(name,sex,age = '9',city = '濟(jì)南'):
print('name:',name)
print('sex:',sex)
print('age:',age)
print('city:',city)
print(setInfo('java','好'))
print(setInfo('ptyhon','見(jiàn)'))
關(guān)鍵字參數(shù)
可變參數(shù)允許你傳入0個(gè)或任意個(gè)參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時(shí)自動(dòng)組裝為一個(gè)tuple朴译。而關(guān)鍵字參數(shù)允許你傳入0個(gè)或任意個(gè)含參數(shù)名的參數(shù)井佑,這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict。請(qǐng)看示例
def person(name,age,**er):
print('name',name,'age',age,'other',er)
print(person('java',16,city = '濟(jì)南',sex = 'nan'))
命名關(guān)鍵字參數(shù)
和關(guān)鍵字參數(shù)kw不同动分,命名關(guān)鍵字參數(shù)需要一個(gè)特殊分隔符毅糟,后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。
如果函數(shù)定義中已經(jīng)有了一個(gè)可變參數(shù)澜公,后面跟著的命名關(guān)鍵字參數(shù)就不再需要一個(gè)特殊分隔符*了:
使用命名關(guān)鍵字參數(shù)時(shí)姆另,要特別注意,如果沒(méi)有可變參數(shù)坟乾,就必須加一個(gè)作為特殊分隔符迹辐。如果缺少,Python解釋器將無(wú)法識(shí)別位置參數(shù)和命名關(guān)鍵字參數(shù):
參數(shù)組合
在Python中定義函數(shù)甚侣,可以用必選參數(shù)明吩、默認(rèn)參數(shù)、可變參數(shù)殷费、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)印荔,這5種參數(shù)都可以組合使用。但是請(qǐng)注意详羡,參數(shù)定義的順序必須是:必選參數(shù)仍律、默認(rèn)參數(shù)、可變參數(shù)实柠、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)水泉。
def f1(a,b,c = '3',args,*kw):
print('a = ',a,'b = ',b,'c = ' ,c,'args = ' ,args,'kw = ' , kw)
在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身草则,這個(gè)函數(shù)就是遞歸函數(shù)钢拧。
#計(jì)算1*2*3*4*....*n的值
def fact(n):
if n == 1:
return 1
return n * fact(n-1)
print(fact(100))