【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字符串拼接,赋值给变量resultresult = "Hello!"+name# 返回变量resultreturn 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的作用域

总结

        

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

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

相关文章

案例三 BeautifulSoup之链家二手房

本案例用到列表,函数,字符串等知识点,知识点参考链接如下: python基础知识(一)&输入输出函数 python基础知识(二)&基本命令 python基础知识(三)&…

PairAug:增强图像-文本对对放射学有什么用?

论文链接 代码链接GitHub - YtongXie/PairAug: [CVPR2024] PairAug: What Can Augmented Image-Text Pairs Do for Radiology? 发表于CVPR2024 机构 1) 澳大利亚机器学习研究所(AIML),澳大利亚阿德莱德大学 2) 西北工业大学计算机科学与工程学院 3) 西北工业…

创作一首音乐需要多长时间?网易云音乐内测AI音乐生成工具『网易天音』

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

​LeetCode解法汇总1026. 节点与其祖先之间的最大差值

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给定二叉树的根节点 root,找出…

Handler——小白能懂的原理,老鸟需要的面经

1.机制学习 1.1Handler定义 发送并处理 与线程的消息队列关联的Message和Runnable 1.2基本用法 1、Message.obtain() 从消息池取得Message 2、Handler().sendMessage(msg) 发送消息 3、Handler().post 将Runnable包装成Message发送 以下提供一个结构代码 import android.os.H…

阿里云微调chatglm3-6b---只有一个python解释器但gradio要求版本不兼容怎么办

安装LLAMA参考博文http://t.csdnimg.cn/6yYwG 在用LLAMA微调大模型的时候总是出现connected error out并且出现这样的界面 这是由于LLMA所要求的gradio版本>4.0.0,<4.2.0&#xff0c;然而chatglm3-6b要求的gradio版本需要gradio3.39.0才能显示出web_demo_gradio.py渲染…

[SystemVerilog]常见设计模式/实践

常见设计模式/实践 RTL 设计&#xff08;尤其是 ASIC&#xff09;的最终目标是制作出最小、最快的电路。为此&#xff0c;我们需要了解综合工具如何分析和优化设计。此外&#xff0c;我们还关注仿真速度&#xff0c;因为等待测试运行实际上是在浪费工程精力。虽然综合和仿真工…

Android MTK 屏下指纹的调试过程记录

Demo链接 -----> https://download.csdn.net/download/u011694328/89118346 一些品牌手机都有了屏下指纹的功能&#xff0c;还算是个比较新颖的功能&#xff0c;最近有项目需要使用屏下指纹&#xff0c; 使用的是汇顶&#xff08;Goodix&#xff09;的指纹方案&#xff0c…

Ps 滤镜:表面模糊

Ps菜单&#xff1a;滤镜/模糊/表面模糊 Filter/Blur/Surface Blur 表面模糊 Surface Blur滤镜可在保留边缘清晰度的同时模糊图像&#xff0c;适用于需要在不损失重要细节的前提下减少图像杂色和噪点的场景。 ◆ ◆ ◆ 使用方法与技巧 1、可按以下步骤进行操作。 首先将“半径”…

前端和后端解决跨域问题的方法

目前很多java web开发都是采用前后端分离框架进行开发&#xff0c;相比于单体项目容易产生跨域问题。 一、跨域问题CORS 1.什么是跨域问题&#xff1f; 后端接收到请求并返回结果了&#xff0c;浏览器把这个响应拦截了。 2.跨域问题是怎么产生的&#xff1f; 浏览器基于同源…

Opentelemetry——Observability Primer

Observability Primer 可观测性入门 Core observability concepts. 可观测性核心概念。 What is Observability? 什么是可观测性&#xff1f; Observability lets us understand a system from the outside, by letting us ask questions about that system without know…

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

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