做爲計算機代碼的一種抽象方式,函數在Python中扮演了極爲重要的角色。今天給你們介紹Python函數的定義、參數的傳入以及調用方式。其中函數參數的傳入方式爲本節重點內容。Python函數的參數形式包括必選參數、默認參數、可變參數、命名關鍵字參數以及關鍵字參數。五類參數可單獨傳入也可組合傳入。python
>>>> 函數
Python 函數的定義code
Python中使用def語句來定義函數,而後依次寫出函數名、括號、括號內的參數以及最後不能忘記的冒號,函數體需另起一行在縮進塊中編寫,最後返回值用return語句執行。看一例求絕對值的自編函數:對象
def f_abs(x):
if x >=0:
return x
else:
return -xci
固然,若是你已經經過pycharm將f_abs保存爲abstest.py文件的話,能夠經過cmd在當前文件目錄下啓動Python而後直接導入函數模塊來調用f_abs函數:pycharm
C:\Users\Administrator>F:
F:\>cd pythoncode>python
>>> from abstest import f_abs
>>> f_abs(-1.0923)
-1.0923cmd
另外咱們在編寫函數時也能夠對函數作參數個數和參數類型的檢查,函數也能夠返回多個值,但其本質是一個tuple。it
>>>> io
函數的參數傳入test
函數參數傳入的靈活性使得Python函數十分強大,函數參數除了必選參數以外,還包括默認參數、可變參數、命名關鍵字參數以及關鍵字參數。函數參數傳遞順序爲必選參數>默認參數>可變參數>命名關鍵字參數>關鍵字參數。
必選參數:
先定義一個求平方的函數:
def power(x):
return x*x
power(-10)
100
可見求平方函數定義起來很方便,但若是咱們想求x的更高次冪的話,恐怕這個函數就得改改了,咱們須要兩個必選參數才能搞定:
def power(x,n):
s = 1
while n >0:
n = n-1
s = s*x
return s
power(10,3)
1000
默認參數:
當咱們從新定義power函數時,原先的只傳入一個必選參數的函數就已經失效了,這時候咱們就須要默認參數來幫忙了,將參數n的值定義爲默認值2:
def power(x,n=2):
s = 1
while n >0:
n = n-1
s = s*x
return s
>>> power(10)
100
>>> power(10,2)
100
從上述例子咱們能夠看出,默認參數的使用能夠簡化函數的調用。必選參數在前,默認參數在後,當傳入多個參數時,變化大的參數放前面,變化小的參數可做爲默認參數放後面,最重要的一點是,默認參數必須指向不變對象!這是設置默認參數時須要注意的。
可變參數:
咱們對一組數的平方求和定義一個函數,即a2+b2+c2+...利用可變參數咱們能夠編寫函數:
def jisuan(*numers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
由上面的命令可見可變參數僅僅須要在參數前加上一個*號就可完成對其定義,參數numbers接受的數據類型爲一個list或者tuple。當咱們已有一個list或者tuple時,咱們能夠直接將其看成可變參數傳入函數中去:
>>> nums = [2,3,5]
>>> jisuan(*nums)
38
關鍵字參數:
與可變參數能夠傳入任意個參數不一樣的是,關鍵字參數能夠傳入任意個含參數名的參數,這樣key-value格式顯然是以dict的數據類型傳入的。且看示例:
def player(name,team,**kw):
print('name:',name,'team:',team,'other:',kw)
player('Harden','Rockets',city = 'Houston')
name: Harden team: Rockets other: {'city':'Houston'}
顯而易見的一點是,關鍵字參數增長了函數的靈活性,除去必選參數外,用戶可經過關鍵字參數輸入任何想要的參數。和可變參數相似的是,咱們也能夠先定義一個dict,而後將其做爲關鍵字參數傳入函數中去:
>>> info = {'city': 'Golden states'}
>>> player('Curry','Worriors',**info)
name: Curry team: Worriors other: {'city':'Golden states'}
命名關鍵字參數:
經過關鍵字參數,咱們能夠傳入任意不受限制的參數,但若是咱們想要限制關鍵字參數的名字,可使用命名關鍵字參數,例如只接受city和age做爲關鍵字參數,定義方式以下:
def palyer(name,team,*,city,age):
print(name,team,city,age)
命名關鍵字參數須要一個*做爲分隔,*後面的參數均爲命名關鍵字參數,這與關鍵字參數的**大不相同。但若是在此以前函數已有可變參數的話,再定義命名關鍵字參數的話就不須要*做爲分隔符了。示例以下:
def palyer(name,team,*tec,city,age):
print(name,team,tec,city,age)
須要注意的是,命名關鍵字參數必需連同參數名一塊兒傳入函數中,不然的話Python將會報錯。
>>> player('Parker','Spurs',city = 'San Antonio',age = 32)
Parker Spurs San Antonio 32
須要說明的一點是,各種參數能夠組合傳入函數當中,只是須要注意傳入的順序:必選參數>默認參數>可變參數>命名關鍵字參數>關鍵字參數。
>>>>
函數的調用
當咱們定義好函數後,相應的函數調用也就十分簡單了,直接使用函數名便可完成調用。固然,並非每一個函數都須要咱們去自定義,Python基礎模塊和各種庫裏面內置了大量函數,咱們可直接調用,這一點和R也是相似的。看幾個Python函數的例子:
>>> abs(-0.3)0.3>>> max(3,0,8,3)8>>> int(10.24)10