Python新手学习函数默认参数设置


Posted in Python onJune 03, 2020

在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值,这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。

为形参指定默认值的语法格式如下:

形参名 = 默认值

从上面的语法格式可以看出,形参的默认值紧跟在形参之后,中间以英文“=”隔开。

例如,如下程序为 name、message 形参指定了默认值:

# 为两个参数指定默认值
def say_hi(name = "孙悟空", message = "欢迎来到C语言中文网"):
  print(name, ", 您好")
  print("消息是:", message)
# 全部使用默认参数
say_hi()
# 只有message参数使用默认值
say_hi("白骨精")
# 两个参数都不使用默认值
say_hi("白骨精", "欢迎学习Python")
# 只有name参数使用默认值
say_hi(message = "欢迎学习Python")

上面程序中在定义 say_hi() 函数时为 name、message 形参指定了默认值,因此程序中第一次调用 say_hi() 函数时没有为 name、message 参数指定参数值,此时 name、message 参数将会使用其默认值。

程序第二次调用 say_hi() 函数时为 name 参数(使用位置参数)指定了参数值,此时 message 参数将会使用默认值。

程序第三次调用 say_hi() 函数时为 name、message 参数(使用位置参数)都指定了参数值,因此这两个参数都使用开发者传入的参数值。

程序第四次调用 say_hi() 函数时只为 message 参数(使用关键字参数)传入了参数值,此时 name 参数将使用默认值。

运行上面程序,可以看到如下输出结果:

孙悟空 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎学习Python
孙悟空 , 您好
消息是: 欢迎学习Python

从上面程序可以看出,如果只传入一个位置参数,由于该参数位于第一位,系统会将该参数值传给 name 参数。因此,我们不能按如下方式调用 say_hi() 函数

say_hi("欢迎学习Python")

上面调用时传入的“欢迎学习Python”字符串将传给 name 参数,而不是 message 参数。

我们也不能按如下方式来调用 say_hi() 函数:

say_hi(name="白骨精", "欢迎学习Python")

因为 Python 规定,关键字参数必须位于位置参数的后面。因此提示错误:positional argument follows keyword argument。

那么,我们能不能单纯地将上面两个参数交换位置呢?

#say_hi("欢迎学习Python" , name="白骨精")

上面调用依然是错误的,因为第一个字符串没有指定关键字参数,因此将使用位置参数为 name 参数传入参数值,第二个参数使用关键字参数的形式再次为 name 参数传入参数值,这意味着两个参数值其实都会传给 name 参数,程序为 name 参数传入了多个参数值。因此提示错误:say hi() got multiple values for argument 'name'。

将函数调用改为如下两种形式是正确的:

say_hi("白骨精", message="欢迎学习Python")
say_hi(name="白骨精", message="欢迎学习Python")

上面第一行代码先使用位置参数为 name 参数传入参数值,再使用关键字参数为 message 参数传入参数值;第二行代码中的 name、message 参数都使用关键字参数传入参数值。

由于 Python 要求在调用函数时关键字参数必须位于位置参数的后面,因此在定义函数时指定了默认值的参数(关键字参数)必须在没有默认值的参数之后。例如如下代码:

# 定义一个打印三角形的函数,有默认值的参数必须放在后面
def printTriangle(char, height = 5) :
  for i in range(1, height + 1) :
    # 先打印一排空格
    for j in range(height - i) :
      print(' ', end = '')
    # 再打印一排特殊字符
    for j in range(2 * i - 1) :
      print(char, end = '')
    print()
printTriangle('@', 6)
printTriangle('#', height=7)
printTriangle(char = '*')

上面程序定义了二个 printTriangle() 函数,该函数的第一个 char 参数没有默认值,第二个 height 参数有默认值。

上面程序中第一次调用 printTriangle() 时,程序使用两个位置参数分别为 char、height 传入参数值,这当然是允许的;第二次调用 printTriangle() 时,第一个参数使用位置参数,那么该参数值将传给 char 参数,第二个参数使用关键字参数为 height 参数传入参数值,这也是允许的;第三次调用 printTriangle() 时,只使用关键字参数为 char 参数传入参数值,此时 height 参数将使用默认值,这是符合语法的。

注意点补充:

说明及注意点

a. 在使用缺省参数后,对于函数的必填参数必须在前,默认参数在后。

b. 默认参数在一个函数中可以有多个。

c. 当一个函数中的某个参数的改动不大,就可以考虑将这个参数设置为默认参数,比如说一个人的民族,这种参数就可以设置为缺省参数。

到此这篇关于Python新手学习函数默认参数设置的文章就介绍到这了,更多相关Python函数默认参数设置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
简单了解Python多态与属性运行原理
Jun 15 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
python中的getter与setter你了解吗
Mar 24 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 #Python
Python新手学习raise用法
Jun 03 #Python
Django实现任意文件上传(最简单的方法)
Jun 03 #Python
Python flask框架如何显示图像到web页面
Jun 03 #Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 #Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
Jun 03 #Python
利用python实现平稳时间序列的建模方式
Jun 03 #Python
You might like
PHP Stream_*系列函数
2010/08/01 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
js修改input的type属性问题探讨
2013/10/12 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
tensorflow实现简单的卷积网络
2018/05/24 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
html5时钟实现代码
2010/10/22 HTML / CSS
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
上班玩游戏检讨书
2014/02/07 职场文书
龙猫观后感
2015/06/09 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
Python使用scapy模块发包收包
2021/05/07 Python
Django实现drf搜索过滤和排序过滤
2021/06/21 Python