参考自:http://www.cnblogs.com/bingabcd/p/6671368.html
普通参数 (位置参数)
- 定义的时候直接定义变量名,调用的时候直接把变量或者值放入指定的位置
- 调用的时候,具体参考的是位置,按位置赋值
- 语法:
def 函数名 (参数1,参数2,……) 函数体 #调用 函数名 (value1,value2,……)
默认参数
- 形参带有默认值
- 调用的时候,如果没有对应的形参赋值。则使用默认值
- 语法:
def func_name (pv1=v1,p2=v2,……) func_back #调用1 func_name() #调用2 v1 = value1 v2 = value2 func_name(v1,v2)
实例:
#默认参数实例
#报名函数,需要知道学生的性别#学习python的学生基本都是男生,所以,报名的时候如果没有特别指定,默认是男生
def reg(name,age,gender = "male"):
if gender == "male":
print("{0} is {1} years old,and he is a good student".format(name,age))
else :
print("{0} is {1} years old,and she is a good student".format(name,age))
#调用默认参数函数案例
reg("mingyue",18,"female")
reg("xiaoming",23)
关键字参数
-
语法与普通函数没有太大区别,但是调用时有区别
-
语法:
func_name ( p1,p2,……): func_back #调用函数 func_name(p1=value1,p2=value2,……)
-
比较麻烦,但是也有好处 - 不容易混淆,一般实参和形参只是按照位置一一对应即可,容易出错 - 使用关键字参数,可以不用考虑参数的位置
案例:
``` #关键字参数案例 def stu (name,age,addr): print("I am a student!") print("我叫{0},我今年{1}岁了,我住{2}".format(name,age,addr)) stu(age = "18",addr = "我家",name = "静静") ```
收集参数(可变参数)
- 把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中
- 语法:
def func_name(*args): func_back #按照list使用方式访问args得到args得到传入的参数 #调用 func_name(p1, p2, p3, ……)
- 参数名args不是必须这样写,但是推荐直接使用args,约定俗成
- 参数args前要有星号*
- 收集参数可以和其他函数共存
案例:
#收集参数案例
#函数模拟一个学生进行自我介绍,但具体内容不清楚
#*args可以看成一个List(列表)
def stu(*args):
print("hello,大家好,我自我介绍下")
print(type(args)) #输出args的格式,这里为tuple格式
for item in args:
print(item)
#收集参数可以不带任何实参使用
stu()
stu("帅哥", 18, "北京顺义区", "崔傻子", "单身")stu("高大神")
收集函数(可变参数)之关键字参数
- 把关键字参数按字典格式存入收集参数
- 语法:
def func_name( **kwargs): func_back #调用 func_name(p1=v1, p2=v2, ……)
- kwargs一般约定俗成,调用的时候把多余的关键字参数放入kwargs
- 访问kwargs需要按照字典的格式访问
案例:
#收集参数之关键字收集参数案例
#自我介绍
def stu( **kwargs):
print("Hello,大家好,我做下自我介绍")
print(type(kwargs)) #kwargs的格式是字典“dict”
#对于字典的访问,python2和python3有区别,本案例使用python3
for k,v in kwargs.items():
print(k, "……", v)
stu(name="大帅哥", age=19, addr="北京市顺义区", lover="崔傻子", worker="student")
print("*" * 20)
stu(name="高大神")
#收集参数为空案例
stu()