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
函数列表的实质就是在元组、列表和字典等序列中建立函数对象的引用,然后通过索引来调用函数。




你可能感兴趣的:(Python,Python,函数参数)