python 函数参数(必选参数、默认参数、可选参数、关键字参数)
2017-06-04 14:27
567 查看
参考:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738449338c8a122a7f2e047899fc162f4a7205ea3000
########################################################
函数参数:必选参数、默认参数、可选参数、关键字参数
########################################################
默认参数:放在必选参数之后
计算x平方的函数:
[python] view
plain copy
def power(x):
return x*x
[python] view
plain copy
power(5)
![](https://img-blog.csdn.net/20150901134220483?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
计算x的立方
[python] view
plain copy
def power(x):
return x*x*x
![](https://img-blog.csdn.net/20150901134512055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这样的话每次计算不同幂函数都要重写函数,非常麻烦,可使用以下代码计算:
[python] view
plain copy
def power(x, n):
s=1
while n>0:
n=n-1
s=s*x
return s
![](https://img-blog.csdn.net/20150901134726328?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
使用修改后的power函数,可以计算任意n次方
不过每次调用函数必须输入两个参数,使用默认参数可以进一步简化函数:
[python] view
plain copy
def power(x, n=2):
s=1
while n>0
n=n-1
s=s*x
return s
![](https://img-blog.csdn.net/20150901135005073?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
设置默认参数时注意事项:必选参数在前,默认参数在后
默认参数最大好处:降低调用函数的难度
学生注册,需要传入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
![](https://img-blog.csdn.net/20150901135834989?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
有多个默认参数化时,调用的时候,既可以按顺序提供默认参数,比如调用enroll('zj', 'M', 8);也可以不按顺序提供部分默认参数,如enroll('Ad', 'a', city='dad')
默认参数也有缺陷的地方:
[python] view
plain copy
def add_end(L=[]):
L.append('END')
return L
![](https://img-blog.csdn.net/20150901140320176?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
原因:函数在定义时,默认参数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
![](https://img-blog.csdn.net/20150901140707103?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
##################################################################
可变参数:就是传入的参数个数是可变的,可以是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
![](https://img-blog.csdn.net/20150901141319125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如何调用一个list或者tuple,可以如上所示,在list或tuple前面加上一个*号,把list或tuple的元素变成可变参数传进去
####################################################################
关键字参数
允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict
使用**表示关键字参数
![](https://img-blog.csdn.net/20150901141835215?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
函数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)
![](https://img-blog.csdn.net/20150901142301230?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
#############################################################
参数组合
参数定义的顺序:必选参数、默认参数、可变参数和关键字参数
![](https://img-blog.csdn.net/20150901142715248?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
#######################################################
in summary:
默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738449338c8a122a7f2e047899fc162f4a7205ea3000
########################################################
函数参数:必选参数、默认参数、可选参数、关键字参数
########################################################
默认参数:放在必选参数之后
计算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
使用修改后的power函数,可以计算任意n次方
不过每次调用函数必须输入两个参数,使用默认参数可以进一步简化函数:
[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;
**kw是关键字参数,kw接收的是一个dict
相关文章推荐
- python 函数参数(必选参数、默认参数、可选参数、关键字参数)
- python--函数(必选参数、默认参数、可变参数、关键字参数)
- python 函数的四种参数---必选参数、默认参数、可变参数和关键字参数
- python 函数参数:必选参数、默认参数、可变参数、关键字参数 和 命名关键字参数
- 【Python学习】函数参数:必选参数、默认参数、可变参数、关键字参数、参数组合
- Python函数参数总结(位置参数、默认参数、可变参数、关键字参数和命名关键字参数)
- Python 必选参数,默认参数,可变参数,关键字参数和命名关键字参数
- Python - 在定义函数时,为什么默认参数不能放在必选参数前面?
- Python - 在定义函数时,为什么默认参数不能放在必选参数前面?
- python tips - 注意函数参数的默认值-默认参数-可选参数
- 【python】函数:函数文档、关键字参数、默认参数、收集参数
- Python笔记-函数定义、默认参数、关键字参数、参数组合
- Python函数参数(默认参数、可变参数、关键字参数及参数组合)
- python---函数(概念、可选参数、默认参数、健壮性、错误信息定义)
- python函数的参数(默认参数、可变参数、关键字参数和参数组合)
- Python —— 函数的参数 默认参数 可变参数 关键字参数 命名关键字参数
- [代码笔记] python的函数定义之各种参数(必须,关键字,默认值,不定长)
- Python中的函数参数格式 (可变参数 与 默认参数)
- python的位置参数、默认参数、关键字参数、可变参数区别
- Python3基础 函数 关键字参数 的示例