1、关键字参数
关键字参数是按照名称传递参数的,而与参数的位置无关,它使用类似给变量赋值的方式调用。以student_grade()函数为例,使用关键字参数调用:
- >>> def student_grade(name, grade, has_bonus):
- ... if has_bonus:
- ... grade += 10
- ... if grade > 100:
- ... grade = 100
- ... print('{name}的成绩为{grade}'.format(name=name, grade=grade))
- ...
- >>> student_grade(name='Ming', grade=79, has_bonus=False)
- Ming的成绩为79
使用关键字参数调用函数时,参数的位置变得无关紧要,只要参数的名字是正确的,函数就能够正常调用:
- >>> student_grade(grade=80, has_bonus=True, name='Ming')
- Ming的成绩为90
- >>> student_grade(has_bonus=True, name='Ming', grade=99)
- Ming的成绩为100
关键字参数和位置参数还可以混用,下面都是合法的调用方式:
- >>> student_grade('Ming', grade=79, has_bonus=False)
- Ming的成绩为79
- >>> student_grade('Ming', 79, has_bonus=False)
- Ming的成绩为79
混用关键字参数和位置参数使得调用函数变得更加灵活,但是有一种情况是不合法的,即关键字参数出现在位置参数的前面:
- >>> student_grade(name='Ming', bonus=False, 59)
- File "
" , line 1- SyntaxError: positional argument follows keyword argument
Python解释器提示出错了,因为位置参数跟在了关键字参数后面。
说明
无论是位置参数还是关键字参数,都是函数在调用时使用的说法,也就是实参,称它们为位置实参和关键字参数更准确。
2、参数的默认值
在创建自定义函数时,可以给参数提供默认值。如果在调用函数时指定了参数的值,那么使用该值,否则使用默认值。在之前的student_grade()基础上稍作修改,给has_bonus参数提供一个默认值:False,即默认没有10分的奖励分:
- >>> def student_grade_v1(name, grade, has_bonus=False):
- ... if has_bonus:
- ... grade += 10
- ... if grade > 100:
- ... grade = 100
- ... print('{name}的成绩为{grade}'.format(name=name, grade=grade))
- ...
在调用函数时,可以不指定has_bonus参数的值:
- >>> student_grade_v1('Ming', 59)
- Ming的成绩为59
当然也可以指定has_bonus参数的值,此时has_bonus的值为指定的值,可以使用关键字参数或者位置参数:
- >>> student_grade_v1('Ming', 59, True)
- Ming的成绩为69
- >>> student_grade_v1('Ming', 59, bonus=True)
- Ming的成绩为69
下面是一个有更多参数默认值的示例:
- >>> def personal_info(name, gender='女', pet='狗', has_glasses=False):
- ... tag = '他' if gender == '男' else '她' # 用三目运算符确定性别称呼
- ... print('{0}是个{1}孩。'.format(name, gender))
- ... print('{}最喜欢的宠物是{}。'.format(tag, pet))
- ... if has_glasses:
- ... print('{0}戴眼镜。'.format(tag))
- ... else:
- ... print('{0}不戴眼镜。'.format(tag))
- ...
这个函数比之前的要复杂一些,它会根据用户提供的信息,打印一些个性化的句子。因为此函数有很多参数,所以合法的调用方式有很多,以下是其中的一些:
- >>> personal_info('梅梅') # 一个位置参数,即名字,其他参数使用默认值
- 梅梅是个女孩。
- 她最喜欢的宠物是狗。
- 她不戴眼镜。
- >>> personal_info(name='梅梅') # 一个关键字参数
- 梅梅是个女孩。
- 她最喜欢的宠物是狗。
- 她不戴眼镜。
- >>> personal_info('梅梅', has_glasses=True) # 一个关键字参数和一个位置参数
- 梅梅是个女孩。
- 她最喜欢的宠物是狗。
- 她戴眼镜。
- >>> personal_info(name='小明', gender='男') # 两个关键字参数
- 小明是个男孩。
- 他最喜欢的宠物是狗。
- 他不戴眼镜。
- >>> personal_info(pet='猫', name='梅梅') # 两个关键字参数
- 梅梅是个女孩。
- 她最喜欢的宠物是猫。
- 她不戴眼镜。
- >>> personal_info('小明', '男', '猫', True) # 四个位置参数
- 小明是个男孩。
- 他最喜欢的宠物是猫。
- 他戴眼镜。
如果对Python开发感兴趣或者想要深入学习的现在可以免费领取学习大礼包哦(点击领取80G课程资料 备注:领资料)。