形式参数和实际参数

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

在调用函数时,大多数情况下,主调函数和被调用函数之间有数据传递关系,这就是有参数的函数形式。函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。

函数参数在定义函数时放在函数名称的后面的一对小括号中,如图5所示。

图5  函数参数

在使用函数时,经常会用到形式参数和实际参数,二者都叫作参数,它们的区别将先通过形式参数与实际参数的作用来进行讲解,再通过一个比喻和实例进行深入探讨。

(1)通过作用理解

形式参数和实际参数在作用上的区别如下:

l  形式参数:在定义函数时,函数名后面括号中的参数为“形式参数”。

l  实际参数:在调用一个函数时,函数名后面括号中的参数为“实际参数”,也就是将函数的调用者提供给函数的参数称为实际参数。通过图6可以更好地理解。

图6  形式参数与实际参数

根据实际参数的类型不同,可以分为将实际参数的值传递给形式参数和将实际参数的引用传递给形式参数两种情况。其中,当实际参数为不可变对象时,进行值传递;当实际参数为可变对象时,进行的是引用传递。实际上,值传递和引用传递的基本区别就是,进行值传递后,改变形式参数的值,实际参数的值不变;而进行引用传递后,改变形式参数的值,实际参数的值也一同改变。

例如,定义一个名称为demo的函数,然后为demo()函数传递一个字符串类型的变量作为参数(代表值传递),并在函数调用前后分别输出该字符串变量,再为demo()函数传递一下列表类型的变量作为参数(代表引用传递),并在函数调用前后分别输出该列表。代码如下:

# 定义函数

def demo(obj):

    print("原值:",obj)

    obj += obj

# 调用函数

print("=========值传递========")

mot = "唯有在被追赶的时候,你才能真正地奔跑。"

print("函数调用前:",mot)

demo(mot)                  # 采用不可变对象―字符串

print("函数调用后:",mot)

print("=========引用传递 ========")

list1 =  ['绮梦','冷伊一','香凝','黛兰']

print("函数调用前:",list1)

demo(list1)                  # 采用可变对象―列表

print("函数调用后:",list1)

上面代码的执行结果如下:

=========值传递========

函数调用前: 唯有在被追赶的时候,你才能真正地奔跑。

原值: 唯有在被追赶的时候,你才能真正地奔跑。

函数调用后: 唯有在被追赶的时候,你才能真正地奔跑。

=========引用传递 ========

函数调用前: ['绮梦', '冷伊一', '香凝', '黛兰']

原值: ['绮梦', '冷伊一', '香凝', '黛兰']

函数调用后: ['绮梦', '冷伊一', '香凝', '黛兰', '绮梦', '冷伊一', '香凝', '黛兰']

从上面的执行结果中可以看出,在进行值传递时,改变形式参数的值后,实际参数的值不改变;在进行引用传递时,改变形式参数的值后,实际参数的值也发生改变。

(2)通过一个比喻来理解形式参数和实际参数

函数定义时参数列表中的参数就是形式参数,而函数调用时传递进来的参数就是实际参数。就像剧本选主角一样,剧本的角色相当于形式参数,而演角色的演员就相当于实际参数。

场景模拟:第2章的实例01实现了根据身高和体重计算BMI指数,但是这段代码只能计算一个固定的身高和体重(可以理解为一个人的),如果想要计算另一个人的身高和体重对应的BMI指数,那么还需要把这段代码重新写一遍。如果把这段代码定义为一个函数,那么就可以计算多个人的BMI指数了。

图标 (35)

  实例02  根据身高、体重计算BMI指数(共享版)

在IDLE中创建一个名称为function_bmi.py的文件,然后在该文件中定义一个名称为fun_bmi的函数,该函数包括3个参数,分别用于指定姓名、身高和体重,再根据公式:BMI=体重/(身高×身高)计算BMI指数,并输出结果,最后在函数体外调用两次fun_bmi函数,代码如下:

def fun_bmi(person,height,weight):

    '''功能:根据身高和体重计算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.83,60)                # 计算路人甲的BMI指数

fun_bmi("路人乙",1.60,50)               # 计算路人乙的BMI指数

运行结果如图7所示。

图7  根据身高、体重计算BMI指数

从该实例代码和运行结果可以看出:

(1)定义一个根据身高、体重计算BMI指数的函数fun_bmi(),在定义函数时指定的变量person、height和weight称为形式参数。

(2)在函数fun_bmi()中根据形式参数的值计算BMI指数,并输出相应的信息。

(3)在调用fun_bmi()函数时,指定的“路人甲”、1.83和60等都是实际参数,在函数执行时,这些值将被传递给对应的形式参数。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何仿一个抖音极速版领现金的进度条动画?

效果演示 不仅仅是实现效果&#xff0c;要封装&#xff0c;就封装好 看完了演示的效果&#xff0c;你是否在思考&#xff0c;代码应该怎么实现&#xff1f;先不着急写代码&#xff0c;先想想哪些地方是要可以动态配置的。首先第一个&#xff0c;进度条的形状是不是要可以换&am…

【图解IO与Netty系列】Reactor模型

Reactor模型 Reactor模型简介三类事件与三类角色Reactor模型整体流程 各种Reactor模型单Reactor单线程模型单Reactor多线程模型主从Reactor模型 Reactor模型简介 Reactor模型是服务器端用于处理高并发网络IO请求的编程模型&#xff0c;与传统的一请求一线程的同步式编程模型不…

day05-多任务-正则-装饰器

一、多任务 1-进程和线程 进程是操作系统分配资源的最小单元 线程执行程序的的最小单元 线程依赖进程&#xff0c;可以获取进程的资源 一个程序执行 先要创建进程分配资源&#xff0c;然后使用线程执行任务 默认情况下一个进程中有一个线程 2-多任务介绍 运行多个进程或线程执…

Day44 动态规划part04

背包问题 01背包问题&#xff1a;每件物品只能用一次完全背包问题&#xff1a;每件物品可以使用无数次 01背包问题 暴力解法&#xff1a;每一件物品其实只有两个状态&#xff0c;取或者不取&#xff0c;所以可以使用回溯法搜索出所有的情况&#xff0c;那么时间复杂度就是 o…

【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名

【LeetCode刷题】Day 14 题目1&#xff1a;153.寻找旋转排序数组中的最小值思路分析&#xff1a;思路1&#xff1a;二分查找&#xff1a;以A为参照思路2&#xff1a;二分查找&#xff0c;以D为参照 题目2&#xff1a;LCR 173.点名思路分析&#xff1a;思路1&#xff1a;遍历查找…

【显示方案IC-速显微】

最近偶然间接触到“速显微”的显示方案&#xff0c;个人体验了一把感觉还是挺顺手的&#xff0c;虽然手里没有板子没有上手测试一番。 这是他们的官网链接&#xff1a; https://www.thorsianway.com/product/chip 从官网可以看到有两颗个系列的IC已经量产&#xff1a;GC9005和G…

物联网实战--平台篇之(十一)设备管理后台

目录 一、设备数据库 二、添加设备 三、排序设备 四、重命名设备 五、删除设备 六、移动设备 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/categ…

词法分析器的设计与实现--编译原理操作步骤,1、你的算法工作流程图; 2、你的函数流程图;3,具体代码

实验原理&#xff1a; 词法分析是编译程序进行编译时第一个要进行的任务&#xff0c;主要是对源程序进行编译预处理之后&#xff0c;对整个源程序进行分解&#xff0c;分解成一个个单词&#xff0c;这些单词有且只有五类&#xff0c;分别时标识符、关键字&#xff08;保留字&a…

【匹配线段问题】

问题&#xff1a; 如下图所示。图中有两行正整数&#xff0c;每行中有若干个正整数。如果第一行的某个数r与第二行的某个数相同&#xff0c;这样就可以在这两个正整数之间划一条线&#xff0c;并称之为r-匹配线段。下图中存在3-匹配线段和2-匹配线段。 请编写完整程序&#xf…

[12] 使用 CUDA 加速排序算法

使用 CUDA 加速排序算法 排序算法被广泛用于计算应用中有很多排序算法&#xff0c;像是枚举排序或者说是秩排序、冒泡排序和归并排序&#xff0c;这些排序算法具有不同的&#xff08;时间和空间&#xff09;复杂度&#xff0c;因此对同一个数组来说也有不同的排序时间&#xf…

9款实用而不为人知的小众软件推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 在电脑软件的浩瀚海洋中&#xff0c;除了那些广为人知的流行软件外&#xff0c;还有许多简单、干净、功能强大且注重实用功能的小众软件等待我们…

Ubuntu中PDF阅读器和编辑器

1. 福昕PDF编辑器 1.1. 下载地址 PDF阅读器下载_PDF编辑器下载_PDF软件官方下载_福昕软件官网 1.2. 安装 sudo dpkg -i signed_com.foxit.foxitpdfeditor_xxx_amd64_UOS.deb 2. WPS DPF 2.1. 下载地址 WPS Office 2019 for Linux-支持多版本下载_WPS官方网站 2.2. 使用 …

【LeetCode算法】第111题:二叉树的最小深度

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;二叉树的先序遍历。求出左子树的最小高度&#xff0c;求出右子树的最小高度&#xff0c;最终返回左子树和右子树的最小高度1。关键&#xff1a;若左子树的高度为0&…

【Linux】写一个日志类

文章目录 1. 源代码2. 函数功能概览3. 代码详细解释3.1 头文件和宏定义3.2 Log类定义3.3 打印日志的方法3.4 操作符重载和析构函数3.5 可变参数函数的原理 4. 测试用例 1. 源代码 下面代码定义了一个 Log 类&#xff0c;用于记录日志信息。这个类支持将日志信息输出到屏幕、单…

[无监督学习] 11.详细图解LSA

LSA LSA&#xff08;Latent Semantic Analysis&#xff0c;潜在语义分析&#xff09;是一种自然语言处理技术。作为一种降维算法&#xff0c;它常被用于信息搜索领域。使用 LSA 能够从大量的文本数据中找出单词之间的潜在关联性。 概述 LSA 是在 1988 年被提出的算法&#xff…

Java(七)——Clonable接口与深拷贝

文章目录 Clonable接口与深拷贝克隆对象深拷贝 Clonable接口与深拷贝 克隆对象 考虑&#xff1a;怎样将对象克隆一份&#xff1f; 答案就在本文&#xff0c;我们先给出一步一步的思考过程&#xff0c;然后总结&#xff1a; 首先设置情景&#xff1a;我们有一个Person类&#x…

Wireshark Lua插件入门

摘要 开发中经常通过抓包分析协议&#xff0c;对于常见的协议如 DNS wireshark 支持自动解析&#xff0c;便于人类的理解&#xff0c;对于一些私有协议&#xff0c;wireshark 提供了插件的方式自定义解析逻辑。 1 动手 废话少说&#xff0c;直接上手。 第一步当然是装上wiresh…

[C++]vector的模拟实现

下面是简单的实现vector的功能&#xff0c;没有涉及使用内存池等复杂算法来提高效率。 一、vector的概述 &#xff08;一&#xff09;、抽象数据类型定义 容器&#xff1a;向量&#xff08;vector&#xff09;vector是表示大小可以变化的数组的序列容器。像数组一样&#xf…

GPT-4o vs. GPT-4 vs. Gemini 1.5 性能评测,谁更胜一筹!

OpenAI 最近推出了 GPT-4o&#xff0c;OpenAI有一次火爆了&#xff0c;其图像、音频、视频的处理能力非常强。 最令人印象深刻的是&#xff0c;它支持用户与 ChatGPT 实时互动&#xff0c;并且能够处理对话中断。 而且&#xff0c;OpenAI 免费开放了 GPT-4o API 的访问权限。…

[ROS 系列学习教程] 建模与仿真 - 使用 Xacro 优化 urdf

ROS 系列学习教程(总目录) 本文目录 一、使用属性表示常量二、使用公式三、使用宏定义四、include 其他文件五、优化实践 对于前文介绍的 urdf 模型&#xff0c;我们可以使用 xacro 来优化&#xff0c;使其更易于维护。 优化点&#xff1a; 多次用到的尺寸用常量定义计算使用…