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

news2025/1/27 12:40:10

目录

知识回顾

目标

函数的返回值

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的作用域

总结

        

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

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

相关文章

基于 S2-LP 实现 802.15.4g 帧格式的数据透传

1. 引言 S2-LP 硬件上支持 802.15.4g 的帧格式,但是现有的 SDK 包并没有基于该帧格式的示例工程,因此本篇文章将介绍如何实现基于 802.15.4g 帧格式的数据透传。 2. 802.15.4g 帧格式 在开始之前,需要对 802.15.4g 帧格式有一个初步的了解…

VS中使用QT的UI提升类时,找不到头文件的情况

1、情况简述 在使用VS时,会发现与QCreator存在一些差异。最主要的就是要设置很多东西,如果不配置的话,就会遇到一些问题。下面我分享下我调试过程中遇到的一个问题。使用Qdesigner的UI提升类时,找不到头文件的情况: …

Flutter - 环境配置提示 cmdline-tools component is missing

问题: flutter doctor运行命令 flutter doctor 报错: Android toolchain - develop for Android devices (Android SDK version 30.0.2) ✗ cmdline-tools component is missing Run path/to/sdkmanager --install "cmdline-tools;lates…

ChatGPT国内镜像站大全(全都是能白嫖的)

今天在知乎看到一个问题:“平民不参与内测的话没有账号还有机会使用ChatGPT吗?” 从去年GPT大火到现在,关于GPT的消息铺天盖地,真要有心想要去用,途径很多,别的不说,国内GPT的镜像站到处都是&a…

OpenHarmony4.0分布式任务调度浅析

1 概述 OpenHarmony 分布式任务调度是一种基于分布式软总线、分布式数据管理、分布式 Profile 等技术特性的任务调度方式。它通过构建一种统一的分布式服务管理机制,包括服务发现、同步、注册和调用等环节,实现了对跨设备的应用进行远程启动、远程调用、…

ES13:类的新增特性、最外层的await、at...

1-类的新增特性 类私有属性和方法:# class Person{// 不需要传参、一开始就需要初始化的,就可以在类的最外面直接声明这个成员state{a:1,b:2}constructor(name,age){this.namename;this.ageage;}}在属性和方法前加#表示私有 #obj{} #prest(){}静态成员…

DP例题详解(二)最短编辑距离和编辑距离

902. 最短编辑距离 - AcWing题库 #include<bits/stdc.h>using namespace std;const int N1010;int n,m; char a[N],b[N]; int f[N][N];int main() {cin>>n>>a1;cin>>m>>b1;for(int i0;i<m;i)f[0][i]i;for(int i0;i<n;i)f[i][0]i;//先初始化…

Leetcode算法训练日记 | day20

一、合并二叉树 1.题目 Leetcode&#xff1a;第 617 题 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新…

linux中rpm包与deb包的区别及使用

文章目录 1. rpm与deb的区别2. deb软件包的格式和使用2.1 deb软件包命令遵行如下约定2.2 dpkg命令2.3 apt-命令 3. Unix和Linux的区别Reference 1. rpm与deb的区别 有的系统只支持使用rpm包安装&#xff0c;有的只支持deb包安装&#xff0c;混乱安装会导致系统问题。 关于rpm和…

绿联 安装火狐浏览器(Firefox),支持访问路由器

绿联 安装火狐浏览器&#xff08;Firefox&#xff09;&#xff0c;支持访问路由器 1、镜像 linuxserver/firefox:latest 前置条件&#xff1a;动态公网IP。 已知问题&#xff1a; 直接输入中文时&#xff0c;不能完整输入&#xff0c;也可能输入法无法切换到中文&#xff0c;可…

【LeetCode刷题笔记】LeetCode 1365.有多少小于当前数字的数字

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

【STM32G431RBTx】备战蓝桥杯嵌入式→省赛试题→第十四届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.KEY, 四个按键IO口都要配置&#xff0c;分别是PB0, PB1,PB2,PA…

看了下雷军的两份个人简历,的确厉害。。。

最近在网上浏览信息时&#xff0c;偶然看到了雷军的两份简历&#xff0c;一份是详细的工作履历&#xff0c;另一份则是他的干部履历表。 从大学时期开始&#xff0c;雷军就展现出了非凡的才华和毅力。高考成绩惊人&#xff0c;仅仅丢了2分&#xff0c;堪称完美&#xff0c;被武…

Linux网络名称空间和虚拟机有何区别

在Linux系统中&#xff0c;网络名称空间和虚拟机都是实现资源隔离和虚拟化的技术&#xff0c;但它们在设计理念、实现机制、资源消耗、使用场景等方面存在着显著的区别。本文旨在全方位、系统性地分析这两种技术的区别。&#x1f50d; 1. 设计理念与实现机制 1.1. 网络名称空…

Qt Creator 12.0.2 debug 无法查看变量的值 Expression too Complex

鼠标放在局部变量上提示“expression too complex”。 在调试窗口也看不到局部变量的值。 这应该是qt的一个bug&#xff0c;https://bugreports.qt.io/browse/QTCREATORBUG-24180 暂时解决方法&#xff1a; 如下图&#xff0c;需要右键项目然后执行"Clean"和&quo…

LeetCode第十六题: 掌握双指针技巧 最接近的三数之和 【python】

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作http://t.csdnimg.cn/Q59WX 作者专栏每日更新&#xff1a; LeetCode…

ssm038汽车养护管理系统+jsp

汽车养护管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本汽车养护管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

QT实现客户端断开连接

Widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), socket(new QTcpSocket(this)) {ui->setupUi(this);//初始化界面ui->msgEdit->setEnabled(false); //不可用ui-…

PTA 应急救援站选址(floyd+打印路径)

大学城虎溪社区有很多居民小区&#xff0c;居民小区道路图是连通的。现要在该社区新建一个应急救援站&#xff0c;且该应急救援站要和某个小区建在一起。为了使应急救援最快速&#xff0c;经各部门商量决定&#xff1a;应急救援站建好后&#xff0c;离应急救援站最远的小区到应…

【SpringBoot整合系列】SpringBoot整合FastDFS(二)

目录 SpringBoot整合FastDFSJava客户端/依赖常用api接口解释1.uploadFile参数返回值 2.uploadSlaveFile参数返回值 3.getMetadata参数返回值 4.overwriteMetadata参数&#xff1a;返回值&#xff1a;无 5.mergeMetadata参数&#xff1a;返回值&#xff1a;无 6.queryFileInfo参…