Python学习
6.3 参数
1.必须参数:
顾名思义,我们在函数列表里所定义的一些参数是必须要传递的。调用函数时需要传入实际的参数给形式参数,这个实际参数就是必须参数。
2.关键字参数:
Python里面,利用关键字参数这样一个特性就可以让你不用考虑函数参数的顺序问题,可以任意指定函数参数的顺序从而实现函数的调用。如下:
“y=3,x=2”就是关键字参数。关键字函数的意义在于代码的可读性。
必须参数和关键字参数的区别在于函数的调用上,而不在于函数的定义上。
3.默认参数:
参数可以给它默认值,让用户不需要去输入这个参数,如下例子:
def print_student_files(name, gender='男', age=18, college='人民路小学'):
print('我叫' + name)
print('我今年' + str(age) + '岁')
print('我是' + gender + '生')
print('我在' + college + '上学')
print_student_files('鸡小萌', '男', 18, '人民路小学')
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
print_student_files('石敢当')
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
print_student_files('王小乐', '男')
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
print_student_files('张小一', age=16)
以上均能正确输出结果。
默认参数的规则总结:
- 如果定义的时候如果想让参数有一些默认值,就在形参后面加“=”,并把你要写的默认值赋给这个形参。
- 如果你没有给这个形参默认值,那么在函数调用时必须给这个形参传递一个实参。如果你给了这个形参默认值,那么在函数调用时就不用给这个形参传递一个实参,也可以传递一个实参来改变这个默认值。
- 必须传入的参数都放在最前面,默认参数都放在后面,不能出现混杂的情况。
- 也可以使用关键字参数来重新指定默认值。
4.可变参数:
有一关键符号“ * ”定义可变参数列表,传入参数的类型是元组,如下:
def demo(*param):
print(param)
print(type(param))
a=(1,2,3,4,5,6)
demo(1,2,3,4,5,6)
demo(*a)
输出结果:
可变参数的特性:
- *a的作用就是把元组里面每个元素平铺出来传到函数可变参数里。
- 可变参数可以和其他类型的参数结合起来,如必须参数,但是应该注意,必须参数应该放在前面。
注意:由于有多种参数,如果形参列表的参数类型组合过于复杂,使用时不利于记忆。所以建议尽量保持函数列表形参类型简单。
如何解析可变参数列表,如下面一个例题,求一个序列元素的平方和,如下:
def squsum(*param):
sum = 0
for i in param:
sum += i*i
print(sum)
squsum(1,2,3,4,5,6)
输出结果:91 结果正确
可见,通过for循环可以解析可变参数列表。
5.关键字可变参数:
(1).两个星号“ ** ”可以定义关键字可变参数,类型是字典类型。如下:
def city_temp(**param):
print(param)
print(type(param))
city_temp(bj='32c', xm='23c', sh='31c')
输出结果:
(2).怎样正确遍历字典?注意:字典应该调用参数的items()方法。如下:
def city_temp(**param):
for key,value in param.items():
print(key,":",value)
city_temp(bj='32c', xm='23c', sh='31c')
输出结果:
(3).如何把字典直接传进来?**a的作用就是把字典里面每个元素平铺出来传到函数可变参数里。如下:
def city_temp(**param):
for key,value in param.items():
print(key,":",value)
a={'bj':'32c', 'xm':'23c', 'sh':'31c'}
city_temp(**a)
输出结果:
(4).关于可变参数,无论是普通的可变参数还是关键字可变参数,可以什么值都不传,将得到一个空的元组或者字典。