函数的参数.
可分为:形参和实参
形参:在函数定义时,括号内定义的参数 --->变量名
实参:在函数调用时,传入括号内的值 --->变量值
注:形参与实参的绑定关系仅仅存在于函数调用的时候,调用结束,绑定关系失效
1.位置参数:按照位置从左到右定义的参数
a.位置形参:在函数定义时,按照位置定义的形参
def func(x,y,z): pass
注:在函数调用时,必须为其传值,且个数相等
b.位置实参:在函数调用时,按照.................的实参
func(1,2,3)
注:位置实参与位置形参一 一对应2.
2.关键字参数:在函数调用时,按照key---value形式定义的实参
func(1,y=3,z=2)
注:位置实参和关键字实参可以混合使用,但是:
1.必须遵循形参的规则
2.不能为同一形参重复传值
func(1,x=1,y=3,z=2) #错误
3.关键字参数必须在位置实参之后(否则会造成语法错误)
func(y=3,1,2) #错误
3.默认参数:在函数定义时,为括号内的形参赋值
def func(name, age, sex='men'):
print('name:%s age:%d sex:%s' % (name, age, sex))
func('bob', 21)
func('tom', 30, 'women')
注:1.在函数调用时可以不给默认参数赋值(使用默认值)
2.对于经常变化的值 --->用位置形参
3.对于基本不变的值 --->用默认形参
4.默认形参应该在位置形参之后(否则语法错误)
5.默认参数在函数定义阶段值就固定
m =1
def f(x,y=m):
print(x,y)
m = 100
f(10)
执行结果---->10,1
6.对于默认形参应该用不可变的数据类型
def func(name,job,l=[]):
l.append(job)
print(name,l)
func('bob','老师')
func('tom',‘工程师')
执行结果---->bob ['老师']
tom ['老师', '工程师'] #可能会造成意外的错误
改进:
def func(name,job,l=None):
if l is None: #每次都用一个新列表
l=[]
l.append(job)
print(name,l)
func('bob','老师')
func('tom','工程师')
执行结果---->bob ['老师']
tom ['工程师']