Python

Python 知识量:10 - 41 - 150

5.4 函数的参数><

按引用传递- 5.4.1 -

参数用于向函数传递数据,按传递方式可分为:按值传递和按引用传递。按值传递时会将参数值复制一份给函数中的相应变量,函数中的变量值是参数值的副本,它们彼此独立,互不影响;按引用传递时不会复制参数值,而是将函数中的相应变量指向参数值,此时函数变量与参数变量指向同一个值。

Paper.png

Python采用按引用传递的方式。下面是一个参数传递的示例:

# parameter.py
def add(a,b,c):
    return a+b+c

运行情况为:

>>> 
==================== RESTART: D:\PythonTestFile\parameter.py ===================
>>> x,y,z=1,2,3
>>> add(x,y,z)
6

在执行以上代码时,首先对变量x、y、z分别赋值1、2、3。然后将x、y、z作为参数传递给函数add(),按照引用传递的方式,函数add()的参数(也称形参)a、b、c就指向了x、y、z的值,即指向了1、2、3。这时a、b、c与x、y、z都分别同时指向了1、2、3。然后函数add()利用a、b、c指向的值计算并返回了1+2+3的结果6。

函数返回值之后,函数变量a、b、c会被自动删除,而变量x、y、z不受影响。

Python引用传递的特点- 5.4.2 -

Python参数的引用传递方式与C++等语言的引用传递存在差异,突出的一点是,对Python函数形参的操作不会影响函数外部实参的值,操作改变的只是形参的指向。下面是一个示例:

# parameter.py
def settwo(a):
    a=2

运行结果为:

>>> 
==================== RESTART: D:\PythonTestFile\parameter.py ===================
>>> x=1
>>> settwo(x)
>>> x
1

以上代码中,函数settwo()的作用是将传入的变量值修改为2。执行时,先创建了变量x,并初始化为1。调用函数settwo()将传入的变量设为2。再次查看变量x时,其值仍然是1,函数没能改变变量x的值。这证明,在函数settwo()中无法访问变量x,内部的操作只是改变了其局部变量的值,对外部的全局变量没有影响。

参数的默认值- 5.4.3 -

在Python中可以给函数的参数设置默认值,在调用函数时,如果没有给函数传递参数,函数将使用默认值。例如:

# parameter.py
def printnumber(n=100):
    print(n)

运行的结果为:

>>> 
==================== RESTART: D:\PythonTestFile\parameter.py ===================
>>> printnumber()
100
>>> printnumber(200)
200

需要注意:虽然可以设置任意多个默认参数,但是有默认值的参数不能位于没有默认值的参数前面。

关键字参数- 5.4.4 -

另一种很实用的参数指定方式是通过关键字来实现,以下是一个示例:

# parameter.py
def want(what='pens',number=5,who='Jeff'):
    print(who,' wants ',str(number)+' ',what+'.')

根据输入不同,运行结果为:

>>> 
==================== RESTART: D:\PythonTestFile\parameter.py ===================
>>> want()
Jeff  wants  5  pens.
>>> want(who='Bob',number=100)
Bob  wants  100  pens.
>>> want(number=25,what='rules',who='James')
James  wants  25  rules.

在调用以上函数时,参数以键值对的方式进行传递。关键字参数的排列顺序可以打乱。