########################################################
默认参数:放在必选参数之后
计算x平方的函数:
[python] view plain copy
- def power(x):
- return x*x
[python] view plain copy
- power(5)
计算x的立方
[python] view plain copy
- def power(x):
- return x*x*x
这样的话每次计算不同幂函数都要重写函数,非常麻烦,可使用以下代码计算:
[python] view plain copy
- def power(x, n):
- s=1
- while n>0:
- n=n-1
- s=s*x
- return s
不过每次调用函数必须输入两个参数,使用默认参数可以进一步简化函数:
[python] view plain copy
- def power(x, n=2):
- s=1
- while n>0
- n=n-1
- s=s*x
- return s
学生注册,需要传入name和gender:
[python] view plain copy
- def enroll(name, gender):
- print 'name :',name
- print 'gender :',gender
如果继续传入年龄、城市等信息咋么办,这会使得调用函数的复杂度大大增加:
[python] view plain copy
- def enroll(name, gender, age=6, city='Beijing'):
- print 'name :',name
- print 'gender :',gender
- print 'age :',age
- print 'city :',city
有多个默认参数化时,调用的时候,既可以按顺序提供默认参数,比如调用enroll('zj', 'M', 8);也可以不按顺序提供部分默认参数,如enroll('Ad', 'a', city='dad')
默认参数也有缺陷的地方:
[python] view plain copy
- def add_end(L=[]):
- L.append('END')
- return L
原因:函数在定义时,默认参数L所制定的地址已经确定,而L是一个list,所以每次调用该函数时,如果改变了L的内容,则下次调用时,默认参数的内容就会改变
note: 默认参数必须指向不变对象!!!
如上代码可使用None实现:
[python] view plain copy
- def add_end(L=None):
- if L is None:
- L=[]
- L.append('END')
- return L
##################################################################
可变参数:就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
在参数前面加上*就是可变参数。在函数内部,参数numbers接收得到的是一个tuple,调用该函数时,可以传入任意个参数,包括0个参数:
[python] view plain copy
- def calc(*numbers):
- sum=0
- for n in numbers:
- sum= sum+n*n
- return sum
如何调用一个list或者tuple,可以如上所示,在list或tuple前面加上一个*号,把list或tuple的元素变成可变参数传进去
####################################################################
允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict
使用**表示关键字参数
函数person不仅可以只传入必选参数,也可以传入任意个数的关键字参数
也可以类似可变参数,先组装一个dict,然后,把该dict转换为关键字参数传进去:
[python] view plain copy
- kw={'city':'Beijing', 'job':'Engineer'}
- person('Jack', 24, city=kw['city'], job=kw['job'])
- person('Jack' ,24, **kw)
#############################################################
参数组合
#######################################################
in summary:
默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
*args是可变参数,args接收的是一个tuple;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。