1. 程式人生 > >Python函式引數注意事項 and 函式列表

Python函式引數注意事項 and 函式列表

1.引數傳遞與共享引用

>>> def f(x):
...     x = 100
...
>>> a = 10
>>> f(a)
>>> a
10

將實參a傳給形參x之後,在函式中重新賦值x並不影響到實參a。因為Python中的賦值是建立變數到物件的引用。重新賦值時,意味著形參引用了新的物件,原來的引用已經作廢。

2.小心使用可變引數

當實參是可變物件時,如列表、字典等,若在函式中修改形參,因為是共享引用,通過實參也獲得修改後的物件。例如:

>>> def f(a):
...     a[0] = 'abc'
...
>>> x = [1,2]
>>> f(x)
>>> x
['abc', 2]

可見,可變引數可在函式中被修改,如果不希望在函式中的修改影響函式外的變數,可使用列表的拷貝作為實參。例如:

>>> def f(a):
...     a[0] = 'abc'
...
>>> x=[1,2]
>>> f(x[:])
>>> x
[1, 2]

還可以在函式內對列表進行拷貝,實參仍使用變數,例如:

>>> def f(a):
...     a = a[:]
...     a[0] = 'abc'
...
>>> x=[1,2]
>>> f(x)
>>> x
[1, 2]

3.有預設值的引數

在定義函式時,有預設值的引數應放在引數表的末尾。

4.函式巢狀定義

Python允許在函式內部定義函式,但內部定義的函式只能在函式內部使用。

5.函式列表

Python允許將函式作為列表物件,然後通過列表索引來呼叫函式,例如:

>>> def add(a,b):
...     return a + b
...
>>> def fac(n):
...     if n == 0:
...             return 1
...     else:
...             return n * fac(n-1)
...
>>> d = [add, fac]
>>> d[0](1,2)
3
>>> d[1](5)
120
>>>
>>> d = (add, fac)              #建立包含函式列表的元組物件
>>> d[0](2,3)
5
>>> d[1](5)
120

Python還允許使用字典來建立函式對映,例如:

>>> d = {'求和':add, '階乘':fac}
>>> d['求和'](1,2)
3
>>> d['階乘'](5)
120
函式列表的實質就是在元組、列表和字典等序列中建立函式物件的引用,然後通過索引來呼叫函式。