python之函数(参数,匿名函数,局部变量和全局变量)

文章目录

  • 前言
  • 一、函数的参数
    • 1、形参和实参
    • 2、必传参数(也叫:必须参数)
    • 3、关键字传参
    • 4.、默认参数
    • 5、不定长参数
    • 6、传参的顺序
  • 二、匿名函数(lambda函数)
    • 1. 定义及特点语法格式
    • 2. lambda函数的特点
  • 三、函数返回值return
  • 四、局部变量与全局变量
    • 1. 局部变量
    • ​​​​​​​2. 全局变量
    • 3. 当全局变量遇到局部变量
    • 4. 用global在函数内部修改全局变量


前言

对于函数参数,这个地方,刚开始的时候,我根本没有理解到。我也是理解了很久,后面理解了,但是在使用过程中,其实也在出错。所以在这里就专门的总结一下。


一、函数的参数

1、形参和实参

形参:在我们定义函数的时候,括号里的参数就叫形参

实参:在我们调用函数的时候,传入的参数就是实参

 可以理解为:形参就是一个形式的参数,摆在那个位置作为一个形式的参数

其中,numb1和numb2就是形参;3和4就是实参。

形参是我们定义函数的时候有的,而实参是我们调用函数传入的。

2、必传参数(也叫:必须参数)

python函数参数大致可以分为4种,即必传参数,关键字参数,默认参数和不定长参数。先来说说必传参数,必传参数是在函数调用时必须要传入的参数,而且传入的实参要和定义时的形参位置要一一对应,不然会报错或者结果不符合预期。如下:

 

传入的实参和形参位置不对,结果不同。因此,对于必传参数来说,传入的实参个数和形参个数一定要相同,而且位置也要一一对应。

当然上面的例子是看不出来的,那么下面的这个例子就可以体现出来位置对应的重要性。

 

 

3、关键字传参

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时实参顺序与形参顺序不一致,因为 Python 解释器能够用参数名匹配参数值。如下:

 这种传参的方式是最推荐的,原因是:

(1)可以很明确的知道,这个函数里面的形参的名字是什么。

(2)无论参数的位置在哪里,都可以传对参数。

4、默认参数

在调用函数时,如果形参有默认值,而在传实参的时候没有对应的参数,则会取形参的默认值。如果传了,就以为实参的值为准。


使用默认参数是要特别注意**默认参数一定要放在命名参数(形参)后面,不然会报错。**如下:

 这个是解释器自动就捕捉到了错误。

5、不定长参数

当我们不确定要传入的参数个数时,可以使用不定长参数,不定长参数有两种格式,与上面两种参数略有不同,如下:

(1)*args:加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。


(2)**kargs: 加了两个星号 ** 的参数会以字典的形式导入,即key=value的形式


 注意:这个地方的产品,创始人,合伙人其实是个字典的key,可以理解为一个变量。这个变量是不能加引号的,如果加了就会报错。

 

 

6、传参的顺序

必传参数 > 默认参数 > *args >  **kwargs

注意:为什么要把默认参数放在第二个的位置呢?如果放在了最后的位置,那么默认参数永远都不会被修改,放到最后相当于是没有意义的。

二、匿名函数(lambda函数)

1. 定义及特点语法格式

所谓匿名函数,就是没有函数名,也就不需要用def关键字来定义,它只是一个表达式,比起def函数要简单的多,一般也只用于处理一些简单的逻辑。语法格式如下:

lambda 参数1,参数2,... 参数n: 表达式

#定义一个lambda函数,实现两个数的加法运算
sum_data = lambda a, b: a + b
print(sum_data(12, 3))
print(sum_data(4, -3))

 

2. lambda函数的特点


lambda函数以下几个特点:

(1)lambda 只是一个表达式,函数体比 def 简单很多
(2)lambda函数的主体是一个表达式,而不是代码块;也仅仅只能在lambda表达式中封装有限的逻辑
(3)lambda函数有自己的命名空间,不能访问表达式之外的参数
(4)在处理一些简单逻辑但又不想用def定义函数时,就可以使用lambda函数,如果处理的逻辑比较复杂代码比较多时,还是使用def较好。
 

三、函数返回值return

在编程规范里,函数都是有返回值的!上面说了函数是实现某一特定功能的代码块,既然是做一件事,那么就得有反馈结果,成功或者失败,亦或其他;就像 y=ax + b一样,只要你给一个x就会有一个对应的y返回。上面的反馈结果即就是函数的返回值。

不带return的函数,返回值为空

带return的函数


 

返回多个值
return可以同时返回多个值,下面函数有两个return语句,那么会返回两个值吗?

 答案是:不会。

 return语句的特点

(1)返回函数的结果值

(2)当函数执行return语句后就表示该函数已经执行完毕,不在执行后面的代码

(3)一个函数只能执行一次return

那么要返回两个值,怎么做呢?

那就需要把结果写在一个return里面

 注意:return 是以元组的形式返回值的

四、局部变量与全局变量

1. 局部变量

什么是局部变量呢?顾名思义,局部变量只能该函数内(局部)使用。有如下几个特点

(1)局部变量,是在函数内部定义的变量

(2)局部变量使用的范围是本函数内部,其他函数以及外部访问一律无效

(3)当函数被调用是,局部变量被创建,函数调用结束时,局部变量又被释放


如下:

def number():
    #定义局部变量a, b
    a = 1
    b = 2
    print(a, b)
#调用时局部变量生效
number()
#不调用时,进行外部访问无效
print(a, b)

 

2. 全局变量

那什么又是全局变量呢?全局变量与局部变量相反,即既能够在函数内部调用,也能在外部其他地方调用。如下

a = 1
b = 2
def number():
    #定义局部变量c,d
    c = 1
    d = 2
    #函数内部调用a,b
    su = a + c
    st = b + d
    print("su:", su)
    print("st:", st)
#调用函数
number()
#打印全局变量a,b
print("a b:", a, b)

 

 

3. 当全局变量遇到局部变量

先说结论,当局部变量和全局变量的变量名字一样时,局部变量的作用域以为局部变量值为准,此时改变局部变量的值不会影响全局变量的值,如下

 

4. 用global在函数内部修改全局变量

如果想在函数内部修改全局变量,怎么办?用global。**如果你在函数内部对某个变量使用了global,那么它就成为了全局变量,你在函数内部对它的任何修改都会作用于全局。**如下

 


部分内容转自优秀的博主:

python之函数_搬砖,攒路费的博客-CSDN博客


总结

以上就是平时使用中,容易混淆的地方。这次在这里专门总结出来,目的就是加深记忆。

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

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

相关文章

【测试开发】实训记录日志

软件测试系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 了解测试开发和软件测试 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 …

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框(bboxs)与每个默认框(…

SpringMVC-【回顾】

回顾MVC架构 什么是mvc:模型、视图、控制器 -----软件设计规范 回顾servlet maven项目导入依赖(webmvc,servlet-api,jsp-api,jstl,junit)创建子模块,在子模块中添加框架支持(在子模块中导入依赖jsp、servlet【因为父…

2018 年一月联考逻辑真题

2018 年一月联考逻辑真题 三、逻辑推理:第 26-55 小题,每小题 2 分,共 60 分。下列每題给出的A.、 B.、C.、D.五个选项中,只有一项是符合试题要求的。请在答题卡上将所选项的字母涂黑。 真题(2018-26)-翻译…

区块链的基本介绍

目录 1、简介 2、区块链的分类 2.1 公有链 2.2 联盟链 2.3 私有链 3、区块链特征 4、区块链结构 5、区块链对记账权利的分配方式 5.1 POW 5.2 PoS 5.3 DPoS 6、Defi、NFT、 gameFi 7、DAPP 7.1 DAPP 的核心要素 8、比特币 8.1 比特币简介 8.2 比特币数字签名…

基站机房:保障通信网络稳定,如何解决安全隐患?

基站机房作为无线通信网络的关键组成部分,承载着大量的网络设备和通信设施,对于运营商和通信服务提供商来说具有重要意义。 无论是大型运营商还是通信服务提供商,动环监控系统都将成为他们成功运营和管理通信网络的关键工具。 客户案例 案例…

Java学习路线(22)——测试框架Junit

一、单元测试概念 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法正确性。 二、Junit测试框架 (一)概念: Jun…

HBase:(三)HBase API

HBase:(一)安装部署_只爱大锅饭的博客-CSDN博客hbase部署安装https://blog.csdn.net/qq_35370485/article/details/130988364?spm1001.2014.3001.5501 1.创建maven项目 2.添加依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hba…

【Java基础】注解与反射

一、学习笔记 &#xff08;本文内容基本源自参考链接1视频教程&#xff09; 1、注解的含义 1&#xff09;注解&#xff08;annotation)是从jdk5.0开始引入的新技术&#xff0c;其作用&#xff1a;不是程序本身&#xff0c;可对程序作解释&#xff08;该作用与注释comment相同…

MFC(十二)多个对话框

我们来制定多个对话框&#xff0c;每个对话框都有不同的功能&#xff0c;单击下一步&#xff0c;即可跳转到下一个对话框 1.新建一个启动按钮 2.在资源视图&#xff0c;Dialog里面&#xff0c;右键-->添加资源---->dialog>选择IDD PROPPAGE_SMALL新建 属性页&#…

同浏览器下多窗口进行跨源通信、同源通信

同浏览器下多窗口进行跨源通信、同源通信 多页面通信运用到了“发布订阅”的设计模式&#xff0c;一个页面发布指令&#xff0c;其他页面进行订阅并进行相应的行为操作&#xff01; 一、跨源通信 window.postMessage() window.postMessage() 方法可以安全地实现跨源通信。通常…

Vue.js 中的数据双向绑定是如何实现的?

Vue.js 中的数据双向绑定是如何实现的&#xff1f; Vue.js 是一款流行的前端框架&#xff0c;它的核心功能之一是数据双向绑定。本文将介绍 Vue.js 中数据双向绑定的实现原理&#xff0c;并附上相关代码实例。 什么是数据双向绑定&#xff1f; 在传统的前端开发中&#xff0c…

智能应用搭建平台——LCHub低代码表单 vs 流程表单 vs 仪表盘

1. LCHub低代码如何选择 「流程表单」:填报数据,并带有流程审批功能,适合报销、请假申请或其他工作流; 「表单」:填报数据,并带有数据协作功能,如修改、删除、导入、导出,并可以给不同的人不同的管理权限; 「仪表盘」:数据分析处理、结果展示功能,如数据汇总、趋…

JavaSSM笔记(一)

**建议&#xff1a;**对Java开发还不是很熟悉的同学&#xff0c;最好先花费半个月到一个月时间大量地去编写小项目&#xff0c;不推荐一口气学完&#xff0c;后面的内容相比前面的内容几乎是降维打击&#xff0c;一口气学完很容易忘记之前所学的基础知识&#xff0c;尤其是Java…

Python--注释

Python--注释 <font size4, colorblue> 一、Python中注释的形式<font size4, colorblue> 1、单行注释&#xff1a;使用“#”符号注释<font size4, colorblue> 2、多行注释&#xff1a;使用一对三个英文单引号注释<font size4, colorblue> 3、多行注释&…

通用文字识别OCR 之实现数字化教材

引言 通用文字 OCR 识别 API 是一种功能强大的服务&#xff0c;可用于多场景、多语种的整图文字检测和识别&#xff0c;通过将OCR技术应用于学校环境&#xff0c;可以实现教育资源的数字化和学习过程的自动化。 本文将探讨通用文字识别OCR 在学校的实际应用&#xff0c;希望对…

如何在 JavaScript 中创建自定义警告框

本文将介绍如何使用 jQuery UI、SweetAlert2 和自定义警报功能在 JavaScript 中创建自定义警报框。 使用 jQuery UI 创建自定义警告框 我们可以使用 jQuery UI 来模仿 JavaScript 本机 alert() 函数的功能。 尽管 jQuery UI 有很多 API&#xff0c;您可以使用它的 dialog() AP…

基于摄影测量的三维重建【终极指南】

我们生活的时代非常令人兴奋&#xff0c;如果你对 3D 东西感兴趣&#xff0c;更是如此。 我们有能力使用任何相机&#xff0c;从感兴趣的物体中捕捉一些图像数据&#xff0c;并在眨眼间将它们变成 3D 资产&#xff01; 这种通过简单的数据采集阶段进行的 3D 重建过程是许多行业…

泰克AFG31000系列任意波函数发生器应用

模拟电路检定 这是一个模拟世界。所有物理量均使用模拟信号捕获和表示。因此&#xff0c;需要检定放大器、滤波器和转换器等模拟电路的性能。 InstaView? 技术避免在阻抗不匹配的 DUT 上增加的波形不确定性频率范围为 25 MHz 至 250 MHz由于信号保真度高&#xff0c;无需使…

# 车载软件架构 —— 闲聊几句AUTOSAR OS(三)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最…