为参数设置默认值

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

调用函数时,如果没有指定某个参数将抛出异常,为了解决这个问题,我们可以为参数设置默认值,即在定义函数时,直接指定形式参数的默认值。这样,当没有传入参数时,则直接使用定义函数时设置的默认值。定义带有默认值参数的函数的语法格式如下:

def functionname(…,[parameter1 = defaultvalue1]):

    [functionbody]

参数说明:

l  functionname:函数名称,在调用函数时使用。

l  parameter1 = defaultvalue1:可选参数,用于指定向函数中传递的参数,并且为该参数设置默认值为defaultvalue1。

l  functionbody:可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。

注意:在定义函数时,指定默认的形式参数必须在所有参数的最后,否则将产生语法错误。

例如,修改根据身高、体重计算BMI指数的函数fun_bmi(),为其第一个参数指定默认值,修改后的代码如下:

def fun_bmi(height,weight, person = "路人"):

    '''功能:根据身高和体重计算BMI指数

       person:姓名

       height:身高,单位:米

       weight:体重,单位:千克

    '''

    print(person + "的身高:" + str(height) + "米 \t 体重:" + str(weight) + "千克")

    bmi=weight/(height*height)                  # 用于计算BMI指数,公式为:BMI:体重/身高的平方

    print(person + "的BMI指数为:"+str(bmi))    # 输出BMI指数

    # 判断身材是否合理

    if bmi<18.5:

        print("您的体重过轻 ~@_@~\n")

    if bmi>=18.5 and bmi<24.9:

        print("正常范围,注意保持 (-_-)\n")

    if bmi>=24.9 and bmi<29.9:

        print("您的体重过重 ~@_@~\n")

    if bmi>=29.9:

        print("肥胖 ^@_@^\n")

然后调用该函数,不指定第一个参数,代码如下:

fun_bmi(1.73,60)                       # 计算BMI指数

执行结果如下:

路人的身高:1.73米      体重:60千克

路人的BMI指数为:20.04744562130375

正常范围,注意保持 (-_-)

多学两招:在Python中,可以使用“函数名.__defaults__”查看函数的默认值参数的当前值,其结果是一个元组。例如,显示上面定义的fun_bmi()函数的默认值参数的当前值,可以使用“fun_bmi.__defaults__”,结果为“('路人',)”。

另外,使用可变对象作为函数参数的默认值时,多次调用可能会导致意料之外的情况。例如,编写一个名称为demo()的函数,并为其设置一个带默认值的参数,代码如下:

def demo(obj=[]):          # 定义函数并为参数obj指定默认值

    print("obj的值:",obj)

    obj.append(1)

调用demo()函数,代码如下:

demo()               # 调用函数

将显示以下结果:

obj的值: []

连续两次调用demo()函数,并且都不指定实际参数,代码如下:

demo()               # 调用函数

demo()               # 调用函数

将显示以下结果:

obj的值: []

obj的值: [1]

从上面的结果看,这显然不是我们想要的结果。为了防止出现这种情况,最好使用None作为可变对象的默认值,这时还需要加上必要的检查代码。修改后的代码如下:

def demo(obj=None):

    if obj==None:

        obj = []

    print("obj的值:",obj)

    obj.append(1)

连续两次调用demo()函数,并且都不指定实际参数,代码如下:

demo()               # 调用函数

demo()               # 调用函数

将显示以下运行结果:

obj的值: []

obj的值: []

说明:定义函数时,为形式参数设置默认值要牢记一点:默认参数必须指向不可变对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle Linux上安装ORDS

ORDS就是Oracle REST Data Services。 环境如下&#xff1a; Oracle Linux 8Oracle Database 19cIP地址为A.B.C.D 要安装最新版本的ORDS&#xff0c;当前为24.1.1。 全程参考文档&#xff1a;Installing and Configuring Oracle REST Data Services 安装ORDS 添加reposit…

org.apache.kafka.clients.consumer.CommitFailedException

kafka报org.apache.kafka.clients.consumer.CommitFailedException问题分析 org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that…

使用反射调用Android隐藏API

前情提要 每一次Android大版本的升级&#xff0c;往往会有大量的APP出现兼容性问题&#xff0c;导致这个情况的主要原因是由于APP的热修复SDKs以及依赖Android internal API(内部API)&#xff0c;也就是非SDK API。这些API是指标记hide的类、方法以及字段&#xff0c;它们不属…

多线程的坑

有以下列表&#xff0c; List shardingCreateTablesList new ArrayList(); shardingCreateTablesList.add(“tb1”); shardingCreateTablesList.add(“tb2”); shardingCreateTablesList.add(“tb3”); shardingCreateTablesList.add(“tb4”); shardingCreateTablesList.add(…

ReDos攻击浅析

DOS为拒绝服务攻击&#xff0c;re则是由于正则表达式使用不当&#xff0c;陷入正则引擎的回溯陷阱导致服务崩溃&#xff0c;大量消耗后台性能 正则 ​ 探讨redos攻击之前&#xff0c;首先了解下正则的一些知识 执行过程 大体的执行过程分为: 编译 -> 执行编译过程中&…

数据标准的制定落地

目录 什么是数据标准 基本定义 目的 数据标准体系分类 从内容层面分类 从管理视角分类 从面向的对象分类 从数据结构的角度分类 数据标准价值 业务价值 技术价值 管理价值 数据标准和数据治理的关系 数据标准在数据治理各项任务中的作用 数据标准与主数据 数据…

实用软件分享---超级轻量级的强力卸载软件工具UninstallView_1.51

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

JS中的 ?. ?? ??=

1.可选链(?.) /*只有当a存在,同时a具有name属性的时候,才会把值赋给b,否则就会将undefined赋值给b.重要的是,不管a存在与否,这么做都不会报错.*/let a;let b a?.name;//undefinedconst arr [{ name: "ww" }, { name: "qq" }];console.log(arr?.[0]);/…

Kubernetes 之 StatefulSet基本原理

Kubernetes 之 StatefulSet StatefulSet 定义 StatefulSet 是一个有状态的集合&#xff0c;不同于一般 Pod 的一致性&#xff0c;不同的 Stateful Set 创建的 Pod 之间存在数据上的差异。同时它们是有序的&#xff0c;这样它们在故障或删除后恢复&#xff0c;自身的名字也不会…

django中,出现CSRF verification failed. Request aborted.错误

这是跨站点访问的防范机制&#xff0c;csrf是一个令牌&#xff0c;会验证登录&#xff0c;需要在setting中把 "django.middleware.csrViewMiddleware" 注释掉 并在html文件中的<body>内添加 {% csrf token %} 就可以了

Star CCM+边界层设置

边界层介绍 在流体仿真中&#xff0c;边界层是指靠近实体表面的流体区域&#xff0c;其作用是描述流体在实体表面附近的速度和压力分布。边界层主要影响着物体表面的摩擦阻力、热传导以及质量传输等现象。 一般来说&#xff0c;在流体仿真中会设置一到三层不同厚度的边界层。…

JZ2440笔记:rtc驱动

在common-smdk.c里smdk_devs添加&s3c_device_rtc 重新编译uImage&#xff0c;测试&#xff1a; # ls /dev/rtc* -l crw-rw---- 1 0 0 254, 0 May 6 21:58 /dev/rtc0 # date Tue May 6 21:59:56 UTC 1975 # date 05311448202420 date: invalid date …

【小白专用】mysql 添加索引-结合实战项目

mysql的索引有很多种&#xff0c;下面我们来介绍以下。 1.添加主键索引&#xff1a; primary key ALTER TABLE table_name ADD PRIMARY KEY ( column ) 2.添加 唯一索引&#xff1a; ALTER TABLE table_name ADD UNIQUE (column ) 3.添加 普通索引&#xff1a; ALTER TAB…

LLM 大语言模型学习笔记

通俗易懂的LLM&#xff08;上篇&#xff09;-CSDN博客 通俗易懂的LLM&#xff08;下篇&#xff09;-CSDN博客 前言一、大模型激活函数 1、ReLU2、GeLU3、GLU4、GeGLU5、SwiGLU二、位置编码 1、旋转位置编码三、Decoder-only模型 1、生成任务2、推理流程3、解码生成方式四、三种…

最常用的电平转换电路

最常用的电平转换电路 两颗NMOS搭建的电平转换电路![请添加图片描述](https://img-blog.csdnimg.cn/direct/2b496321257f4bc4a1f23a086337ed27.png)两颗NPN三极管搭建的电平转换电路二极管钳位搭建电平转换电路二极管和MOS管组合的电平转换电路专用转换芯片电平转换 两颗NMOS搭…

java解析excel文件,返回json

我这里用的是springboot项目&#xff0c;配合Maven使用的。首先需要引入依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency…

YAML快速编写示例

一、案例 1.1 自主式创建service关联上方的pod 资源名称my-nginx-kkk命名空间my-kkk容器镜像nginx:1.21容器端口80标签njzb:my-kkk 1.1.1 创建一个demo文件夹 1.1.2 创建并获取模版文件 1.1.3 查看服务并编写yaml文件 1.1.4 编写yaml文件并部署&#xff0c;查看服务是否运行成…

elementui中的el-checkbox-group添加全选按钮

//多选子组件 <template><div class"multiple-choice"><el-checkbox class"no1" v-if"isShowAllBtn" :indeterminate"isIndeterminate1" v-model"checkAll1" border :style"{borderColor:isIndetermina…

elementUI - 折叠以及多选的组件

//子组件 <template><!-- 左侧第二个 --><div class"left-second-more"><div class"layer-list-wrapper1"><el-collapse v-model"activeNames" change"handleChange"><el-collapse-item v-for"…

数据结构基础篇(5)

二十一.栈和队列的定义和特点 栈 栈的定义 栈是一个特殊的线性表&#xff0c;是限定仅在一段(通常是表尾)进行插入和删除操作的线性表又叫后进后出段的线性表&#xff0c;LIFO结构栈的概念 栈是仅在表尾进行插入&#xff0c;删除操作的线性表表尾叫栈顶Top&#xff1b;表头叫栈…