位置参数
调用函数时根据函数定义的参数位置来传递参数。
# 位置参数
def test_param_type1(user,nickname):
print("user is %s ,his nickname is %s"%(user,nickname))
if __name__ == '__main__':
# 位置参数测试
test_param_type1("名字","昵称")
输出:
user is 名字 ,his nickname is 昵称
默认参数
定义函数可以给参数提供默认值,调用函数时可传可不传该默认参数的值PS:所有位置参数必须出现在默认参数前,包括函数定义和调用。
# 默认参数
def test_param_type2(user,nickname="默认"):
print("user is %s ,his nickname is %s" % (user, nickname))
def test_param_type2_2(test_list=[]):
test_list.append('END')
return test_list
def test_param_type2_3(test_list=None):
if test_list is None:
test_list = []
test_list.append('END')
return test_list
if __name__ == '__main__':
# 默认参数测试
test_param_type2("名字")
test_param_type2("名字", "昵称")
# 默认参数测试2,默认参数为数组
# 若设置值,则正常
test = test_param_type2_2([1,2,3])
print("正常调用:",test)
test = test_param_type2_2([1, 2, 3])
print("正常调用:",test)
# 若使用默认值,多次使用则会出错
"""
Python函数在定义的时候,默认参数L 的值就被计算出来了,即[] ,因为默认参数L 也是一个变量,它
指向对象[] ,每次调用该函数,如果改变了L 的内容,则下次调用时,默认参数的内容就变了,不再是函
数定义时的[] 了。所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
"""
test = test_param_type2_2()
print("坑:",test)
test = test_param_type2_2()
print("坑:",test)
test = test_param_type2_3()
print("解决方案:",test)
test = test_param_type2_3()
print("解决方案:",test)
输出:
user is 名字 ,his nickname is 默认
user is 名字 ,his nickname is 昵称
正常调用: [1, 2, 3, 'END']
正常调用: [1, 2, 3, 'END']
坑: ['END']
坑: ['END', 'END']
解决方案: ['END']
解决方案: ['END']
可变参数
传入的参数个数是可变的
# 可变参数
"""
加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。
"""
def test_param_type3(name,*lesson):
print("姓名:",name)
print("课程:")
for l in lesson:
print(" ",l)
print("\n")
if __name__ == '__main__':
# 可变参数测试
test_param_type3("测试","Chinese","math","English")
test_param_type3("测试2","Chinese")
test_param_type3("测试3")
输出:
姓名: 测试
课程:
Chinese
math
English
姓名: 测试2
课程:
Chinese
姓名: 测试3
课程:
关键字参数
将键值对, 作为参数传递给函数
# 关键字参数
def test_param_type_4(**info):
for key, value in info.items():
print("{0} == {1}".format(key, value))
if __name__ == '__main__':
# 关键字参数测试
test_param_type_4(name="测试", age=20, city="beijing")
输出:
city == beijing
age == 20
name == 测试
备注
如要同时使位置参数,可变参数,关键字参数这三种参数, 顺序是这样的:
some_func(fargs, *args, **kwargs)