1. 程式人生 > >Python中函式的定義以及形參實參小結

Python中函式的定義以及形參實參小結

1.python中函式的定義

Python中函式的定義形式:

def func_name(parameter1,parameter2,...):
	語句段
	return語句

例子:

def printhello(personname):
	return "Hello," + personname + "!"

2.在函式體內修改引數內容會影響到函式外的物件嗎?

(1)如果數字、字串或元組,本身就是不可變的,自然也不會影響到函式體外的物件

(2)如果是列表或字典,那麼函式內修改引數內容,就會影響到函式體外的物件。

備註:這裡的修改引數是修改引數物件內部的值,不是賦值哦。即var[1]='hello'和var=['hello','world']區別。即使是列表,在函式體內對引數重新賦值了,不會影響到函式體外的物件哦。注意和c++的比較。

3.python中傳遞實參是可以指定引數的名字 以及預設引數的定義

def foo(familyname,givenname):
#param1,param2就是位置引數
#呼叫foo函式時,引數的順序是由嚴格順序的。
#eg: foo('wang', 'hao')   是正確的
#eg: foo('hao', 'wang')   是錯誤的
#eg: foo(familyname='wang', givenname='hao')   是正確的
#eg: foo(givenname='hao', familyname='wang')   是正確的
另外,定義函式時可以定義預設引數,形式如下:
def foo(familyname='wang', givenname='hao'):

4.python中可變引數

(1)函式定義可變引數

形式1:

def foo(*params):
#params在函式體內的型別是元組

#呼叫方式是
foo(1, 4, 56)

形式2:
def foo(**params):
#params在函式體內的形式是字典

#呼叫方式是
foo(x=1, y=4, z=56)

舉一個普通引數,形式1(位置引數)和形式2(關鍵字引數)聯合一起的例子,如下所示:

def print_params(x, y, z=3, *pospar, **keypar):
        print x, y, z
        print pospar
        print keypar

if __name__ == '__main__':
        print_params(1, 2, 3, 5, 6, 7, foo=1, bar=2)
上述程式輸出結果為:
1 2 3
(5, 6, 7)
{'foo': 1, 'bar': 2}

備註:我們通常用這兩種可變引數來使函式收集引數,所有我們經常會見到一種函式的定義:

def func(fargs, *args, **kwargs)
其中fagus是普通引數,*args和*kwargs用來收集不定量的形參。

5.形參的兩種特殊實參傳遞形式

(1)以元組作為實參

def foo(familyname, givenname):
        print 'my familyname is ' + familyname
        print 'my givenname is ' + givenname

if __name__ == "__main__":
        username = ('wang', 'hao')
        foo(*username)

(2)以字典作為實參
def foo(familyname, givenname):
        print 'my familyname is ' + familyname
        print 'my givenname is ' + givenname

if __name__ == "__main__":
        username = {'givenname':'hao', 'familyname':'wang'}
        foo(**username)


備註:python中所謂的關鍵字引數和位置引數,都是來描述實參的形式。形參中有預設引數概念。