【Python函数和类3/6】函数的返回值

目录

知识回顾

目标

函数的返回值

Tips

练习

​编辑return的其它特性

任意类型的返回值

返回多个值

return的位置

小结

局部变量

局部变量的作用域

全局变量

全局变量的作用域

同名变量

pi的作用域

总结

        


知识回顾

        在上篇博客中,我们学习给函数设置参数。在今天学习开始前,我们进行一个简单的复习。

        假设,一位农场主想要统计多个正方形圈地的面积大小,来决定种植什么蔬菜水果。用代码该如何实现呢?没错,我们可以定义⼀个计算⾯积的函数,然后进行调用就行了。

        如图,定义了计算圈地面积的函数,并进行调用。

        那如果我们需要通过土地的面积大小来判断是否可以种植西瓜,能用刚才的函数呢?如图,调用函数计算边长为13的圈地面积,并判断其值是否大于160,此时程序会报错。这是因为函数内数据被直接输出,没有传递到函数外,没办法用getArea(13)和160比较大小。

目标

        也就是说,到目前为止,我们创建的函数都是对数据进行处理,处理后使用print直接将结果输出。但是,在某些场景中,我们需要将函数处理的结果反馈回来,而非直接输出。那么今天,我们就来学习函数的返回值,并简单了解局部变量全局变量

函数的返回值

        返回值的作用类似于下面的场景:

        主管向员工下达命令,让其去打印文件,员工打印好文件后并没有完成任务,还需要将文件交给主管。

        下面,我们一起来学习函数的返回值

        定义了函数getArea,参数length用于接收数据,其功能为计算正方形面积,并将结果返回。第7行,调用函数getArea,并将调用结果赋值给变量 result。第8行,输出变量 result。

# 定义一个函数getArea,传入参数length
def getArea(length):
    area = length*length 
    return area

# 调用函数,再将结果赋值给变量result
result = getArea(13)
print(result)

return

        关键字return,将函数内的数据返回到调用函数的位置。示例中,会将计算好的面积值返回给第7行的getArea(13)。

返回值

        return后面是指定的返回值,返回值会返回到调用的地方。

调用有返回值的函数

        当定义有返回值的函数时,调用函数的代码getArea(13)等同于一个"变量",用于保存函数的返回值169。

Tips

        再次强调,当定义有返回值的函数时,调用函数的代码getArea(13)等同于一个变量。如图,如果我们只是调用该函数,不会有输出结果。我们可以使用print输出变量一样,将调用函数的代码输出。

练习

有返回值的函数

        定义了一个叫做 "sayHello" 的函数,该函数包含 1 个参数 name。该函数的功能是将 "Hello!" 与 name 进行字符串拼接,赋值给变量 result,并将 result 返回。传入参数"Mary" 调用该函数,并输出。

        字符串拼接示例:

        print("Hello!" + "Mary")

        输出结果:

        Hello!Mary

参考代码:

# 定义函数sayHello(),传入参数name
def sayHello (name):
    # 将"Hello!"与name字符串拼接,赋值给变量result
    result = "Hello!"+name
    # 返回变量result
    return result

# 调用sayHello(),传入"Mary",并输出
print(sayHello("Mary"))

运行结果:

return的其它特性

        刚才我们简单的了解了return的用法,它可以将函数内部的数据返回到函数外。除此以外,return还有一些其他重要的特性,让我们一起来了解一下吧~ 

任意类型的返回值

        return的返回值没有类型限制,可以是一个变量名,一串字符串,甚至是一个表达式。如图,是返回一个表达式的示例。

返回多个值

        如图所示,定义的函数用于计算出正⽅形的周长和面积,与我们刚才学到的函数不同,它返回了两个值。当函数要返回多个值时,返回值间以逗号,隔开。此时函数的返回值,会以元组的格式返回。

return的位置

        注意,return是函数结束的标志。函数内可以有多个return,但只要执行一次,整个函数就会结束运行。所以return的位置决定了函数能够执行到哪一步。

        下面,我们以函数中有循环语句为例,来讲解return位置的重要性。

        如图,函数内部有 for 循环,而return语句在循环外。在函数内,程序按照从上到下的顺序执行,所以程序会等 for 循环执行完毕后,再执行 return 语句。因此,最后函数返回了列表中全部元素的和6。

        但是,如果 return 的位置在循环内部,当第1次循环时,就会执行到return语句。此时,整个函数就会结束运行,返回当前total的值1。

小结

        至此,我们就学完了函数中return的常见用法。在这里,回顾一下 print 和 return 的区别。简单来说,使用print的函数,会将结果直接输出,是为了显示信息。使用return的函数,是为了返回结果。并且返回值可以用变量接走,继续使用该返回值做其它事。

        那为什么不将函数中的数据保存到变量中,而是通过return将值返回到函数外呢?这是因为有些变量只在函数内有效,无法将数据传递到函数外。所以,我们使用函数时,要注意不同变量的有效范围,即变量的作用域

局部变量

        如图,我们在函数内定义并计算了变量area的值,但是在函数外print(area)会出现area未定义的报错。这是因为,在函数内部定义的变量,只能在函数内使用,出了函数就不能使用。我们把这样的变量,称为局部变量

        定义了函数getArea,并调用该函数,最后输出。第3行,定义了一个新的变量area,并计算。

# 定义一个函数getArea,传入参数length
def getArea(length):
    area = length*length 
    return area

# 传入参数13调用函数,并输出
print(getArea(13))

局部变量

        简单来说,局部变量就是在函数内部定义的变量。局部变量只能在函数内部使用,出了函数就不能使用。

局部变量的作用域

全局变量

        除了在函数内部定义变量,Python 还允许在所有函数的外部定义变量。我们把这样的变量,称为全局变量

        定义了全局变量pi和函数getArea,然后调用该函数并输出。

# 定义一个全局变量pi
pi = 3.14
# 定义一个函数getArea,传入参数radius
def getArea(radius):
    area = pi*radius*radius 
    return area

# 传入参数2调用函数,并输出
print(getArea(2))

全局变量

        简单来说,全局变量就是在函数外部定义的变量。全局变量不仅能在函数内部使用,也能在函数外部使用。

全局变量的使用

        第5行的pi,虽然在函数内部,但是它只是被使用而非定义,所以它还是原来的全局变量。

        注意:只有在函数内被定义的变量才是局部变量

全局变量的作用域

同名变量

        如图,第1和第3行都定义了变量pi,但是本质上他们不是同一个变量。

        因为第3行的pi在函数内重新定义了,属于局部变量,不论如何赋值都不会影响到第1行的全局变量pi的值

        所以,建议对全局变量和局部变量使用不同的变量名

pi的作用域

总结

        

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

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

相关文章

集群开发学习(一)(安装GO和MySQL,K8S基础概念)

完成gin小任务 参考文档: https://www.kancloud.cn/jiajunxi/ginweb100/1801414 https://github.com/hanjialeOK/going 最终代码地址:https://github.com/qinliangql/gin_mini_test.git 学习 1.安装go wget https://dl.google.com/go/go1.20.2.linu…

玩机进阶教程------手机定制机 定制系统 解除系统安装软件限制的一些步骤解析

定制机 在于各工作室与商家合作定制rom中有一些定制机。限制用户私自安装第三方软件。或者限制解锁 。无法如正常机登陆账号等等。定制机一般用于固定行业或者一些部门。专机专用。例如很多巴枪扫描机型等等。或者一些小牌机型。对于没有官方包的机型首先要导出各个分区来制作…

【OpenVINO™】使用 OpenVINO™ C# API 部署 YOLOv9 目标检测和实例分割模型(上篇)

YOLOv9模型是YOLO系列实时目标检测算法中的最新版本,代表着该系列在准确性、速度和效率方面的又一次重大飞跃。它通过引入先进的深度学习技术和创新的架构设计,如通用ELAN(GELAN)和可编程梯度信息(PGI)&…

复合数据类型

在C语言中,复合数据类型是指那些可以包含多个简单数据类型的数据类型。以下是一些常见的C语言复合数据类型以及相关的例子: 1. 数组(Arrays): 数组是一种可以存储多个相同类型数据的数据结构。例如: #in…

从像素游戏到 3A 大作的游戏引擎/框架

Bevy —— Rust 构建的游戏引擎 Bevy 是一款由 Rust 语言构建且简单明了的数据驱动的游戏引擎,并将永远保持开源且免费。 Mach —— Zig 游戏引擎和图形工具包 Mach 是一个 Zig 游戏引擎和图形工具包,用于构建高性能、真正跨平台、健壮且模块化的游戏&…

日程安排组件DHTMLX Scheduler v7.0新版亮点 - 拥有多种全新的主题

DHTMLX Scheduler是一个类似于Google日历的JavaScript日程安排控件,日历事件通过Ajax动态加载,支持通过拖放功能调整事件日期和时间,事件可以按天、周、月三个种视图显示。 备受关注的DHTMLX Scheduler 7.0版本日前正式发布了,如…

JS原生DOM操作 - 获得元素/网页大小/元素宽高

文章目录 获得元素的方法获取页面元素位置宽高概念方法获得网页/元素宽高clientHeight和clientWidth:scrollHeight和scrollWidth:window.innerWidth:element.style.width: offsetXXX 获得网页元素的宽高和相对父元素位置&#xff…

有道词典网页版接口分析与爬虫研究

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除 作者:zhu6201976 一、目标站点 有道词典网页版:网易有道 二、目标接口 url:https://dict.youdao.com/jsonapi_s?doctypejson&…

通过8种加锁情况来弄懂加锁对于线程执行顺序的影响

1个资源类对象,2个线程,2个同步方法,第二个线程等待1s后开启。 //资源类 public class Example {//2个同步方法public synchronized void method1(){System.out.println("线程1正在执行...");}public synchronized void method2()…

(2022级)成都工业学院数据库原理及应用实验三:数据定义语言DDL

唉,用爱发电连赞都没几个,博主感觉没有动力了 想要完整版的sql文件的同学们,点赞评论截图,发送到2923612607qq,com,我就会把sql文件以及如何导入sql文件到navicat的使用教程发给你的 基本上是无脑教程了,…

Banana Pi BPI-M7 RK3588开发板运行RKLLM软件堆AI大模型部署

关于Banana Pi BPI-M7 Banana Pi BPI-M7 采用Rockchip RK3588,板载8/16/32G RAM内存和 64/128G eMMC存储,支持无线wifi6和蓝牙5.2。2x2.5G网络端口,1个HDMIout标准 输出口,2x USB3.0,2xTYPE-C,2x MIPI CSI…

Day96:云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸

目录 云原生-Docker安全-容器逃逸&系统内核漏洞 云原生-Docker安全-容器逃逸&docker版本漏洞 CVE-2019-5736 runC容器逃逸(需要管理员配合触发) CVE-2020-15257 containerd逃逸(启动容器时有前提参数) 云原生-Docker安全-容器逃逸&CDK自动化 知识点&#xff1…

Vue3基础语法

在这个章节中&#xff0c;简单的看下Vue3的基础语法&#xff0c;有了这些基础后&#xff0c;对写vue3单页也就没有什么问题了。 模板语法 在写html时&#xff0c;我们希望在某个节点绑定一个动态值时&#xff0c;是使用dom操作执行的&#xff0c;如下&#xff1a; <!DOCT…

(Java)数据结构——排序(第一节)堆排序+PTA L2-012 关于堆的判断

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 堆排序&#xff08;Heap Sort&#xff09;概念 堆排序是一种基于堆数据结构的排序算法&#xff0c;其核心思想是将待排序的序列构建成一个最大堆&#xff08;或最小…

大模型+交通治理,高德地图“评诊治”系统迎来全新升级

近日&#xff0c;由中国道路交通安全协会主办的第十四届中国国际道路交通安全产品博览会暨公安交警警用装备展(以下简称交博会)在厦门国际会展中心开幕&#xff0c;会上高德地图发布了全新升级的城市交通“评诊治”智能决策SaaS系统&#xff0c;以助力城市交通的可持续、精细化…

spring boot 集成rocketMq + 基本使用

1. RocketMq基本概念 1. NameServer 每个NameServer结点之间是相互独立&#xff0c;彼此没有任何信息交互 启动NameServer。NameServer启动后监听端口&#xff0c;等待Broker、Producer、Consumer连接&#xff0c; 相当于一个路由控制中心。主要是用来保存topic路由信息&#…

知识图谱与人工智能:携手共进

知识图谱与人工智能&#xff1a;携手共进 一、引言&#xff1a;知识图谱与人工智能的融合 在这个数据驱动的时代&#xff0c;知识图谱与人工智能&#xff08;AI&#xff09;之间的融合不仅是技术发展的必然趋势&#xff0c;也是推动各行各业创新的关键。知识图谱&#xff0c;作…

windows下pycharm中配置conda虚拟环境

目录 一&#xff1a;背景 二&#xff1a;安装conda环境 三&#xff1a;pycharm配置环境 四&#xff1a;注意问题 一&#xff1a;背景 在使用python的过程中&#xff0c;我们可能需要在一个windows环境中创建多个版本的python和安装不同的库去做一些开发任务。 使用conda&a…

TQ15EG开发板教程:在MPSOC上运行ADRV9371

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在本文最后。首先在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases…

Docker入门实战教程

文章目录 Docker引擎的安装Docker比vm虚拟机快 Docker常用命令帮助启动类命令镜像命令docker imagesdocker searchdocker pulldocker system dfdocker rmi 容器命令redis前台交互式启动redis后台守护式启动Nginx容器运行ubuntu交互式运行tomcat交互式运行对外暴露访问端口 Dock…