Python之函数

函数介绍

函数:是组织好的可重复使用的,用来实现特定功能的代码段

就比如我们使用过的:input()print()str()、int()、len()等都是Python的内置函数

函数的定义

函数的调用

函数使用时的注意事项:

① 参数如不需要,可以省略

② 返回值如不需要,可以省略

③ 函数必须先定义后使用
 

函数传入参数的使用

传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据

有如下代码,完成了2个数字相加的功能:

def add():result = 1 + 2print(f"1+2的结果是:{result}")

上面的函数的功能非常局限,只能计算1 + 2 

我们可以使用函数的传入参数功能实现每一次使用函数,去计算用户指定的2个数字,而非每次都是1 + 2

传参定义

基于函数的定义语法

可以有如下函数定义

 这样就实现了,每次计算的是x + y,而非固定的1 + 2

x + y的值,可以在调用函数的时候指定。

语法解析函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数

参数之间使用逗号进行分隔

函数调用中,提供的56,称之为:实际参数(实参),表示函数执行时真正使用的参数值

传入的时候,按照顺序传入数据,使用逗号分隔

传入参数的数量是不受限制的。

是可以不使用参数也可以仅使用任意N个参数

函数的返回值

什么是返回值

程序中的返回值:

如图代码:

定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者

所以,变量p接收到了函数的执行结果。

综上所述:

所谓“返回值”,就是程序中函数完成事情后,最后给调用者的结果

语法格式如图:

如图,变量就能接收到函数的返回值

语法就是:通过return关键字,就能向调用者返回数据

要注意的是函数体在遇到return后就结束了,所以写在return后的代码是不会执行

None类型

思考:如果函数没有使用return语句返回数据,那么函数有返回值吗?

实际上是:有的。

在Python中有一个特殊的字面量:None,其类型是:<class 'NoneType'>

无返回值的函数,实际上就是返回了:None这个字面量

None表示:空的、无实际意义的意思

函数返回的None,就表示,这个函数没有返回什么有意义的内容。

也就是返回了空的意思。

例如:

def say_hello():print("hello...")# 使用变量接收say_hello函数的返回值
result = say_hello()
# 打印返回值
print(result)         # None
# 打印返回值类型 
print(type(result))   # <class 'NoneType'>

None可以主动使用return返回,效果等同于不写return语句:

def say_hello():print("hello...")return None# 使用变量接收say_hello函数的返回值
result = say_hello()
# 打印返回值
print(result)         # None

None类型的应用场景

None作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景。

用在函数无返回值上

用在if判断上

if判断中,None等同于False

一般用于在函数中主动返回None,配合if判断做相关处理

用于声明无内容的变量上

定义变量,但暂时不需要变量有具体值,可以用None来代替

 

函数的说明文档

函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。

我们可以给函数添加说明文档,辅助理解函数的作用。

语法如下:

通过多行注释的形式,对函数进行说明解释,其内容应写在函数体之前

在利用PyCharm编写代码时,可以通过鼠标悬停,查看调用函数的说明文档

:param 用于解释参数

:return 用于解释返回值

函数的嵌套

所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数

def fun_b():print("————2————")def fun_a():print("————1————")fun_b()print("————3————")# 调用函数fun_a
fun_a()

运行效果:

 

执行过程:

先进入函数fun_a(),执行完print语句之后调用函数fun_b,输出其内容,最后返回输出最后一句print语句,执行结束

如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次 函数A执行的位置 

变量的作用域

变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)

主要分为两类:局部变量和全局变量

局部变量

所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效

变量a是定义在`testA`函数内部的变量,在函数外部访问则立即报错.

局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量

全局变量

所谓全局变量,指的是在函数体内、外都能生效的变量

思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?

答:将这个数据存储在一个全局变量里面

global关键字

假如testB()函数需要修改变量num的值为200,如何修改程序?

`testB`函数内部的 num = 200 是定义的一个局部变量 

使用 global关键字 可以在函数内部声明变量为全局变量, 如下所示

简单总结: 

局部变量作用范围在函数内部,在函数外部无法使用

全局变量在函数内部和外部均可使用

如要将函数内定义的变量声明为全局变量可以使用global关键字

 

 

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

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

相关文章

AI:62-基于深度学习的人体CT影像肺癌的识别与分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Firefox 119 正式发布

Firefox 119 已正式发布。新版本除了修复 Bug 之外&#xff0c;还增强了 Firefox View 功能、支持在 PDF 文档中插入图片&#xff0c;以及引入 Encrypted Client Hello (ECH) 以增强隐私保护等。 主要变化 改进 Firefox View&#xff1a;用户可以在该页面查看所有窗口打开的标…

动态壁纸软件Live Wallpaper HD mac中文版功能特色

Live Wallpaper HD mac提供了一系列美丽的主题场景&#xff0c;将为您的桌面增添活力。从城市景观、日落到遥远的星系&#xff0c;每个屏幕都有特别的触感&#xff0c;可以定制您的天气小部件和时钟样式&#xff0c;并使用您喜爱的图片创建您自己的个性化壁纸。 Living Wallpap…

这款AI-3D模型实现了无数人的建模梦

hi&#xff0c;同学们&#xff0c;本期是第25期AI生产力工具教程 别说各位&#xff0c;连我也不敢信&#xff0c;现在制作3D模型比泡杯奶茶的时间还要快&#xff01; 最近发现了一个天花板级的图片生成3D模型的AI工具——Artefacts.Ai&#xff0c;喂1张图片&#xff0c;就能创…

【漏洞复现】Aapache_Tomcat_AJP协议_文件包含漏洞(CVE-2020-1938)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号CVE-2020-1938漏洞名称Aapache_Tomcat_AJP文件包含漏洞漏洞评级高…

在SpringBoot 中集成Swagger

前提&#xff1a;我的SpringBoot 项目的版本是 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18-SNAPSHOT</version><relativePath /> <!-- l…

驱动开发11-1 编写IIC驱动-读取温湿度数据

头文件 head.h #ifndef __HEAD_H__ #define __HEAD_H__ #define GET_HUM _IOR(m, 1, int) #define GET_TEM _IOR(m, 0, int) #endif 应用程序 si7006.c #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #inc…

Flink日志采集-ELK可视化实现

一、各组件版本 组件版本Flink1.16.1kafka2.0.0Logstash6.5.4Elasticseach6.3.1Kibana6.3.1 针对按照⽇志⽂件⼤⼩滚动⽣成⽂件的⽅式&#xff0c;可能因为某个错误的问题&#xff0c;需要看好多个⽇志⽂件&#xff0c;还有Flink on Yarn模式提交Flink任务&#xff0c;在任务执…

ElasticSearch高级功能详解与原理剖析

ES数据预处理 Ingest Node Elasticsearch 5.0后&#xff0c;引入的一种新的节点类型。默认配置下&#xff0c;每个节点都是Ingest Node&#xff1a; 具有预处理数据的能力&#xff0c;可拦截lndex或Bulk API的请求对数据进行转换&#xff0c;并重新返回给Index或Bulk APl 无…

华为OD机试 - 高效的任务规划 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Educational Codeforces Round 157 (Rated for Div. 2) F. Fancy Arrays(容斥+组合数学)

题目 称一个长为n的数列a是fancy的&#xff0c;当且仅当&#xff1a; 1. 数组内至少有一个元素在[x,xk-1]之间 2. 相邻项的差的绝对值不超过k&#xff0c;即 t(t<50)组样例&#xff0c;每次给定n(1<n<1e9),x(1<x<40), 求fancy的数组的数量&#xff0c;答案…

Spring Boot 3系列之-启动类详解

Spring Boot是一个功能强大、灵活且易于使用的框架&#xff0c;它极大地简化了Spring应用程序的开发和部署流程&#xff0c;使得开发人员能够更专注于业务逻辑的实现。在我们的Spring Boot 3系列之一&#xff08;初始化项目&#xff09;文章中&#xff0c;我们使用了Spring官方…