赞
踩
函数的参数是python学习中遇到的第一个难点。函数的参数有四大类:
位置参数、默认参数、可变参数、键-值参数(或者叫关键字参数)。
1 位置参数
位置参数就是最普通的参数,如果在定义的时候有位置参数,调用的时候就一定要赋值!比如我定义一个函数如下:
def Xiayule(x):
print(x)
这个参数就是位置参数,调用的时候就要 Xiayule(‘Sun’)
弄出Xiayule()
这种幺蛾子是不对的。
2 默认参数
默认参数是指在定义函数的时候就给定默认值的参数,所以在调用的时候你想给它值就给,不想给就不给。是最任性的参数。示例如下:
def Student(name,age=20):
print(name,age)
在调用该函数的时候,就有两种方式了:
第一种调用方式代表’sui’这个哥们是默认的20岁
而第二种调用意味着’sun’这个姐妹是指定的18岁。
可以猜到默认参数的使用:就是某一个参数只有在少数情况下需要修改!
但是默认参数的使用有两点需要格外注意:
讲到这里,插播一条重要概念,非常重要:可变对象与不可变对象
在python中可变对象有:list,dict
不可变对象有:int,float,tuple,str
python中比较容易混淆的是这俩概念跟变量混在一起。比如说:
a=1
a=2
在上边的这两句,是变量的引用对象变了,a原来引用的是1,第二句改为引用2。但是1和2这两个int本身没有发生变化。
b=[1,2,3]
b+=[6]
b的引用对象是没有变化的,它引用的就是后面的那个list,但是这个list本身的内容变了,由[1,2,3]变为了[1,2,3,6]。
当然这个实例也说明一点,两个list是可以相加连接在一起的!棒不棒!
3 可变参数
可变参数的意思就是参数的个数无法确定,可以是0个,也可是5个,看心情。所以可变参数传进去的只能是list或是tuple。
先声明一个概念:
a=[1,2,3,4] 那么 *a就代表了列表a中的内容。重复一遍,a代表列表,*a代表列表中的内容。
def Student(*name):
for n in name:
print(n)
定义了一个带有可变参数的函数如上所示,在调用的该函数的时候有三种方法:
Student(‘sui’,’sun’)
或者是
ads=[‘sui’,’sun’]
Student(*ads)
或者是
Student()
4 键-值对参数(关键字参数)
前面的可变参数用到了list/tuple,所以聪明的python怎么可能不把dict用上!比如说在填一个表的时候,年龄、姓名是必填的,但是有的哥们也提供了自己的性取向,不对不对,是性别。为了能够把人家的性别也统计进去,就需要键值对参数。
定义的方式是 **buchong
buchong是一个dict,**buchong就代表了buchong里的内容。
tuple/list是一个星号,dict是两个星号。浅薄的我觉得dict就是比list/tuple高一级哈哈哈。
def Student(name,age,**buchong):
print(name,age,buchong)
上面写了一个包含键值对参数的函数。调用的时候同样可以有一下三种方式:
Student(‘sui’,20,gender=’male’)
运行结果: ‘sui’ 20 {‘gender’:’male’}
这里需要注意的就是,在传参的时候用的是 gender=’male’而不是’gender’:’male’ 其实这一点吧,吧,吧,我刚接触的时候也觉得难懂啊!!
buchong={‘gender’:’female’}
Student(‘sun’,18,**buchong)
运行结果同上
Student(‘sun’,18)
运行结果: ‘sun’ 18 {}
(什么都没有,就打印出一个大括号)
5 命名键值对参数(命名关键字参数)
命名的意思就是,填表你不能瞎填啊,真把性取向填上了影响也不好。所以限定个范围,只准填什么东西。
def Student(name,age,*,city,gender)
print(name,age,city,gender)
调用的时候
Student(‘sui’,20,city=’wuhan’,gender=’male’)
其实,命名关键字参数并没有什么卵用,因为它跟位置参数一个样,调用的时候必须每个都赋值。我百度了一下,人家说这个的作用就是因为它在调用的时候必须加上参数名,所以即便顺序错了也没关系。所以关于这个的剩余知识点我也不想写了呢。
6 参数组合
具体的使用中,经常会不止使用到一种参数。这些参数是有顺序的:
位置参数,默认参数,可变参数,键值对参数(关键字参数)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。