Python新手学习函数默认参数设置
作者:silencement 发布时间:2021-08-18 03:50:35
在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值,这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。
为形参指定默认值的语法格式如下:
形参名 = 默认值
从上面的语法格式可以看出,形参的默认值紧跟在形参之后,中间以英文“=”隔开。
例如,如下程序为 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. 当一个函数中的某个参数的改动不大,就可以考虑将这个参数设置为默认参数,比如说一个人的民族,这种参数就可以设置为缺省参数。
来源:https://www.py.cn/jishu/jichu/10664.html


猜你喜欢
- 在计算机科学中,二进制是一种由 0 和 1 组成的数字系统。Python 中提供了一种易于使用的方式来将二进制字符串转换为整数,并支持多种进
- 实现效果如下: 需求:由于后台搜索选项有很多,影响页面美观,所以一进来要隐藏一部分搜索项,只保留1行,点击【展开搜索】按钮的时候才
- 给浏览器绑定事件有时候是非常痛苦的事情,不同的浏览器提供不尽相同的功能的同时,也提供了不同的事件。例如,IE 系列的浏览器支持 mousee
- 主旨在日常工作中,我们会经常且频繁的使用excel表格,那么我们是否可以通过python来操作excel表格,让其自动化的来代替我们的工作呢
- 1、Python的内置高阶函数1.1 map()map()会根据提供的函数对指定序列做映射语法格式:map(function, iterab
- 问题描述:想要去掉图像背景,只保留中心部分目标:1.利用ITK-SNAP制作二值化标签(即mask)2.利用软件ITK-SNAP把一幅图像中
- 前言:array数组要转换成矩阵(matrix)数据类型才能进行一系列的线性运算。matrix类型也有时候要转换成array数组。代码:1.
- Pytorch 多分类模型绘制 ROC, PR 曲线(代码 亲测 可用)ROC曲线示例代码import torchimport torch.
- 做数据分析、科学计算等离不开工具、语言的使用,目前最流行的数据语言,无非是MATLAB,R语言,Python这三种语言,但今天小编简单总结了
- 在一个文件的末尾追加数据是很常用的。在使用过程中应该都比较熟悉不会出现什么错误。但是往一个文件头部插入数据可能或多或少会碰到一些问题。看似正
- 来介绍一下 Python 是采用何种途径解决循环引用问题的。上图中,表示的是对象之间的引用关系,从自对象指向他对象的引用用黑色箭头表示。每个
- mysql作为轻量级开源数据库,在企业级的应用中非常的广泛。我之前用过mssql,oracle,postgresql,mysql。目前阿里云
- 在产品开发中,由UED发起的项目越来越多,但是现在的问题是很难为其设定商业价值的目标。如果没有明确的商业价值目标,很多公司根本没办法花大成本
- 本文实例讲述了Go语言字典(map)用法。分享给大家供大家参考,具体如下:字典是一种内置的数据结构,用来保存 键值对 的 无序集合。(1)字
- 如下所示:ffmpeg中文文档:http://linux.51yip.com/search/ffmpegffmpeg -i test_bao
- 一、安装mysqlclient网上看到很过通过命令:pip install mysqlclient 进行安装的教程,但是我却始终安装失败,遇
- 一、什么是字典树在自然语言处理中,字符串集合常用字典树存储,这是一种字符串上的树形数据结构。字典树中每条边都对应一个字,从根节点往下的路径构
- 具体代码如下所示:# 时间的替换import time,datetimetoday = datetime.datetime.today()p
- 前言Pycharm学习过程中,每次在一个Pycharm窗口建立一个新的文件夹,都需要重新配置anaconda环境。由于本人是初学者,所以写一
- 本文实例讲述了Python统计纯文本文件中英文单词出现个数的方法。分享给大家供大家参考,具体如下:第一版: 效率低# -*- coding: