在第1行设置了x和y后,分别将4和5赋值给x,y。当调用add(x,y)时候,Python创建了两个新变量:a和b,然后它们分别指向x和y。
当a和b相加后,函数返回值,而a和b则被自动删除。整个过程中,x和y未受影响。
但是,有些情况不能使用按引用传递。
#recall.py
def set2(x):
x=1
函数set2将传入的变量值设置为1,但运行的时候,却不理想:
>>> m=4
>>> set2(m)
>>> m
4
该示例可以理解为几步:
1、将4赋值给m.
2、调用set2(m):将m的值赋于给x,这样m和x都指向4
3、将1赋值给x.
4、函数set2结束后,x给删除
在函数set2中,根本不能访问变量m,因此无法修改它指向的值。
二、默认值
给参数指定默认值有很大的帮助,如给参数happily指定了默认值'Welcome to'
#happy.py
def happy(name,happily='Welcome to'):
print(happily,name+'!')
这让你能够以两种不同的方式进行函数调用:
>>> happy('Guangzhou')
Welcome to Guangzhou!
>>> happy('Shenzhen','Smile to')
Smile to Shenzhen!
有关默认参数的一个要点是:只在第一次调用函数时给默认参数赋值。在复杂的程序中,这可能成为小bug的根源,须紧记。
三、关键字参数
在Python中,另一种很有用的参数指定是使用关键字。如:
#shopping.py
def shop(where='store',
what='banana',
howmuch='10 RMB'):
print('I want to go to the',where)
print(' and buy',howmuch,'of',what+'.')
使用该函数:
>>> shop()
I want to go to the store
and buy 10 RMB of banana.
>>> shop(what='orange')
I want to go to the store
and buy 10 RMB of orange.
>>> shop(where='Shenzhen',what='LV')
I want to go to the Shenzhen
and buy 10 RMB of LV.
>>> shop(where='HK',what='Apple',howmuch='4800 RMB')
I want to go to the HK
and buy 4800 RMB of Apple.
关键字参数有两个好处。首先是,能清晰指出了参数值,提高程序可读性;其次,关键字的参数顺序无关重要。