1. 程式人生 > >python3----函數、匿名函數

python3----函數、匿名函數

類型 傳值 fun 記錄 lis app 可能 python 形參

本節將學習如何用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----函數、匿名函數