python3----函數、匿名函數
本節將學習如何用Python定義函數,調用函數,以及學習匿名函數的使用
1.定義函數
Python中定義函數用關鍵字def,如下例所示,func為函數名
def func():
print( "hello world")
2.函數參數
一個函數可以有0個或多個形式參數:
def test_add(x, y):
print (x + y)
函數的形式參數值可以初始化,使用了初始值的參數,在調用的時候可以不需要指定該參數。
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)、類的實例
python3----函數、匿名函數