本節將學習如何用Python定義函數,調用函數,以及學習匿名函數的使用python
1.定義函數app
Python中定義函數用關鍵字def,以下例所示,func爲函數名函數
def func():學習
print( "hello world")對象
2.函數參數字符串
一個函數能夠有0個或多個形式參數:string
def test_add(x, y):io
print (x + y)table
函數的形式參數值能夠初始化,使用了初始值的參數,在調用的時候能夠不須要指定該參數。test
def test_sum(z, x = 1, y = 0):
print(x + y + z)
調用函數:
test_sum(3) # 將打印出:4
test_sum(10, y = 1) # 將打印出:12
test_sum(y = 1, x = 2, z = 10) #將打印出:13
注意:定義函數時,沒有初始化的形式參數必須放在初始化形式參數的前面,不然會報錯
調用函數時,必須指定未初始化的參數,且參數的順序要與函數定義的參數順序一致(除非調用時指定了參數名)
3.函數返回值
Python函數能夠經過return語句返回函數值,若是沒有return語句或者return語句後什麼都沒有,函數將返回:None
字典形參(**args)例子:
def test_dict(a,**b):
print('a is:',a)
print( 'b is:',b)
調用函數方法一:
tict={'x':1, 'y':2,'z':3}
test_dict(10, **tict)
調用函數方法二:
test_dict(10,x=1,y=2,z=3)
輸出結果:
>>>
a is: 10
b is: {'y': 2, 'x': 1, 'z': 3}
元組形參(*args)例子:
def test_tuple(a,*b):
print( 'a is :' ,a)
print( b)
調用函數方法一:
tup = ('a', 1, 2, 'b')
test_tuple(1, *tup)
調用函數方法二:
test_tuple(1, 'a', 1, 2, 'b')
輸出結果:
>>>
a is : 1
('a', 1, 2, 'b')
5.匿名函數
Python能夠用關鍵字lambda定義一個匿名函數,當須要一個函數類型的對象時,能夠建立一個匿名函數來實現
def test_lambda(x):
return lambda x:x+y #這裏將返回一個函數對象
函數調用:
f=test_lambda(10) #建立了一個函數對象:f
print( f(5) ) #將會打印出:15
6.要點記錄
當屢次調用一個具備初始化參數的函數時,該參數只會在第一次調用時被初始化一次。 這使得當形式參數爲可變對象,如:列表、字典或者類的實例時,其結果可能和咱們預期的不同:
def test_param(x=[]):
x.append(10)
print(x)
屢次調用函數(可能咱們但願調用函數的結果是:都打印出列表[10]):
testParam()
testParam()
testParam()
testParam()
實際輸出結果:
>>>
[10]
[10, 10]
[10, 10, 10]
[10, 10, 10, 10]
當形式參數爲不可變對象時,又是怎樣的狀況呢?咱們再觀察另外一個例子:
def testParam(x = 2):
x=x + 2
print(x)
調用函數:
testParam()
testParam()
testParam()
testParam()
實際輸出結果:
>>>
4
4
4
4
備註:
python中,萬物皆對象。
python中不存在所謂的傳值調用,一切傳遞的都是對象的引用,也能夠認爲是傳址。
不可變對象(immutable):int、字符串(string)、float、(數值型number)、元組(tuple)
可變對象(mutable):字典型(dictionary)、列表型(list)、類的實例