【Python基础知识】Python函数的关键字参数和参数的默认值

发布 : python培训      来源:python干货资料

2020-11-27 11:29:34

1、关键字参数

关键字参数是按照名称传递参数的,而与参数的位置无关,它使用类似给变量赋值的方式调用。以student_grade()函数为例,使用关键字参数调用:

  1. >>> def student_grade(name, grade, has_bonus):
  2. ... if has_bonus:
  3. ... grade += 10
  4. ... if grade > 100:
  5. ... grade = 100
  6. ... print('{name}的成绩为{grade}'.format(name=name, grade=grade))
  7. ...
  8. >>> student_grade(name='Ming', grade=79, has_bonus=False)
  9. Ming的成绩为79

使用关键字参数调用函数时,参数的位置变得无关紧要,只要参数的名字是正确的,函数就能够正常调用:

  1. >>> student_grade(grade=80, has_bonus=True, name='Ming')
  2. Ming的成绩为90
  3. >>> student_grade(has_bonus=True, name='Ming', grade=99)
  4. Ming的成绩为100

关键字参数和位置参数还可以混用,下面都是合法的调用方式:

  1. >>> student_grade('Ming', grade=79, has_bonus=False)
  2. Ming的成绩为79
  3. >>> student_grade('Ming', 79, has_bonus=False)
  4. Ming的成绩为79

混用关键字参数和位置参数使得调用函数变得更加灵活,但是有一种情况是不合法的,即关键字参数出现在位置参数的前面:

  1. >>> student_grade(name='Ming', bonus=False, 59)
  2. File "", line 1
  3. SyntaxError: positional argument follows keyword argument

Python解释器提示出错了,因为位置参数跟在了关键字参数后面。

说明

无论是位置参数还是关键字参数,都是函数在调用时使用的说法,也就是实参,称它们为位置实参和关键字参数更准确。

2、参数的默认值

在创建自定义函数时,可以给参数提供默认值。如果在调用函数时指定了参数的值,那么使用该值,否则使用默认值。在之前的student_grade()基础上稍作修改,给has_bonus参数提供一个默认值:False,即默认没有10分的奖励分:

  1. >>> def student_grade_v1(name, grade, has_bonus=False):
  2. ... if has_bonus:
  3. ... grade += 10
  4. ... if grade > 100:
  5. ... grade = 100
  6. ... print('{name}的成绩为{grade}'.format(name=name, grade=grade))
  7. ...

在调用函数时,可以不指定has_bonus参数的值:

  1. >>> student_grade_v1('Ming', 59)
  2. Ming的成绩为59

当然也可以指定has_bonus参数的值,此时has_bonus的值为指定的值,可以使用关键字参数或者位置参数:

  1. >>> student_grade_v1('Ming', 59, True)
  2. Ming的成绩为69
  3. >>> student_grade_v1('Ming', 59, bonus=True)
  4. Ming的成绩为69

下面是一个有更多参数默认值的示例:

  1. >>> def personal_info(name, gender='女', pet='狗', has_glasses=False):
  2. ... tag = '他' if gender == '男' else '她' # 用三目运算符确定性别称呼
  3. ... print('{0}是个{1}孩。'.format(name, gender))
  4. ... print('{}最喜欢的宠物是{}。'.format(tag, pet))
  5. ... if has_glasses:
  6. ... print('{0}戴眼镜。'.format(tag))
  7. ... else:
  8. ... print('{0}不戴眼镜。'.format(tag))
  9. ...

这个函数比之前的要复杂一些,它会根据用户提供的信息,打印一些个性化的句子。因为此函数有很多参数,所以合法的调用方式有很多,以下是其中的一些:

  1. >>> personal_info('梅梅') # 一个位置参数,即名字,其他参数使用默认值
  2. 梅梅是个女孩。
  3. 她最喜欢的宠物是狗。
  4. 她不戴眼镜。
  5. >>> personal_info(name='梅梅') # 一个关键字参数
  6. 梅梅是个女孩。
  7. 她最喜欢的宠物是狗。
  8. 她不戴眼镜。
  9. >>> personal_info('梅梅', has_glasses=True) # 一个关键字参数和一个位置参数
  10. 梅梅是个女孩。
  11. 她最喜欢的宠物是狗。
  12. 她戴眼镜。
  13. >>> personal_info(name='小明', gender='男') # 两个关键字参数
  14. 小明是个男孩。
  15. 他最喜欢的宠物是狗。
  16. 他不戴眼镜。
  17. >>> personal_info(pet='猫', name='梅梅') # 两个关键字参数
  18. 梅梅是个女孩。
  19. 她最喜欢的宠物是猫。
  20. 她不戴眼镜。
  21. >>> personal_info('小明', '男', '猫', True) # 四个位置参数
  22. 小明是个男孩。
  23. 他最喜欢的宠物是猫。
  24. 他戴眼镜。

如果对Python开发感兴趣或者想要深入学习的现在可以免费领取学习大礼包哦(点击领取80G课程资料 备注:领资料)。

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部