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抓取百度查询结果的方法
Jul 08 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
python turtle库画一个方格和圆实例
Jun 27 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
python字符串替换re.sub()实例解析
Feb 09 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
python如何构建mock接口服务
Jan 28 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中使用curl伪造IP的简单方法
2015/08/07 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
JS截取字符串常用方法详细整理
2013/10/28 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
大学应届生的自我评价
2014/03/06 职场文书
初中学生期末评语
2014/04/24 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
广告学专业求职信
2014/06/19 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
2015年团支部工作总结
2015/04/03 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
MySQL数据库必备之条件查询语句
2021/10/15 MySQL
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python