Python函式引數注意事項 and 函式列表
阿新 • • 發佈:2019-02-17
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
函式列表的實質就是在元組、列表和字典等序列中建立函式物件的引用,然後通過索引來呼叫函式。