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

news2024/12/26 23:05:29

文章目录

  • 前言
  • 一、函数的参数
    • 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博客


总结

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

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

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

相关文章

微信小程序商城开发

随着移动互联网的发展,小程序商城逐渐成为了电商领域的新宠。小程序商城具有便捷、快速、安全等优点,为用户提供了更加优质的购物体验。下面我们来介绍小程序商城的功能和优点。 一、商品展示 小程序商城提供了丰富的商品展示,包括商品分类…

llama_index中query_engine的response_mode详解

文章目录 0. 前言1. ResponseMode: tree_summarize (总结摘要-最优)2. ResponseMode: generation3. ResponseMode: no_text4. ResponseMode: simple_summarize (最省token)5. ResponseMode: refine (基于关键词询问-最…

ROS:坐标管理系统

目录 一、机器人中的坐标变换二、TF功能包2.2TF功能包简介2.2TF坐标变换实现2.3TF案例 三、小海龟跟随实验3.1打开小程序3.2查看当前的TF树3.3坐标相对位置关系可视化1(tf_echo)3.4坐标相对位置关系可视化2(rviz) 一、机器人中的坐…

二、电压源、电流源、受控源

点我回到目录 目录 理想电压源 理想电流源 受控源 电流源做功问题 电压源做功问题 理想电压源 •定义:两端电压保持定值或一定的时间函数,且电压值与流过它的电流i无关 •特点:理想电压源两端的电压由本身决定,与外电路无关…

ChatGPT2论文解读《Language Models are Unsupervised Multitask Learners》(2019)

论文总结 以下是我阅读完整篇论文做的个人总结,包含了ChatGPT-2文章的主要内容,可以仅看【论文总结】章节。 数据集 自制了一个网页爬虫,被抓取的网页部分来自于社交平台,这些网页由人工进行过滤。最终生成WebText数据集&#…

多种工厂模式的运用

文章目录 多种工厂模式的运用一、简单工厂模式(非23种设计模式)1.1 结构2.2 实现2.2.1 简单工厂类图2.2.2 代码2.2.3 优缺点 二、静态工厂模式(非23种设计模式)3.1 代码 三、工厂模式3.1 结构 3.2 实现3.2.1 工厂模式类图3.2.2 代…

Rust教程初识

Rust 教程 Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT Licens…

bmp图片怎么转jpg格式?思路提供

BMP和JPG是两种常见的图片格式。BMP文件相对较大,无损压缩,而JPG文件则相对较小,有损压缩。当我们需要在保持图片质量的同时减小文件大小时,我们可以将BMP文件转换为JPG文件。在本文中,我们将介绍如何将BMP文件转换为J…

短视频矩阵源码技术开发

短视频矩阵是一种常见的视频编码标准,它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。在本文中,我们将介绍短视频矩阵的原理和实现,并提供示例代码。 $where_time array(); // 时间 $where_time[] array(name>fbr…

第5章:SpringMVC的视图

一、SpringMVC的视图 SpringMVC中的视图是View接口,视图的作用渲染数据,将模型的Model中的数据展现给用户SpringMVC视图种类很多,默认有转发视图和重定向视图当工程引入jstl依赖,转发视图自动转换为JstlView若使用视图技术是Thym…

【新版】系统架构设计师 - 新老教材对比分析

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 新老教材比较新版教材章节分析 新老教材比较 提示:请自行购买并浏览新版系统架构设计师教材 原教材:2009年出版,共21章,572页。新教材:2022年出…

紧急防勒索病毒的防御方案

一、适用目标(校园网、企业网,windows系列的操作系统): 所有在校园内运行windows系统的电脑,并非只感染服务器操作系统,单机照样感染。会将你电脑中的所有文件全部加密,部分已感染案例有2个共同…

Yolov8轻量级:Next-vit,用于现实工业场景的下一代视觉 Transformer

1.Next-vit介绍 论文:https://arxiv.org/pdf/2207.05501.pdf 由于复杂的注意力机制和模型设计,大多数现有的视觉 Transformer(ViT)在现实的工业部署场景中不能像卷积神经网络(CNN)那样高效地执行。这就带来了一个问题:视觉神经网络能否像 CNN 一样快速推断并像 ViT 一样…

DVPP媒体数据处理图片解码问题案例

DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。 本期就分享几个关于DVPP图片解码问题…

Web的基本漏洞--越权漏洞

目录 一、越权漏洞介绍 1.越权漏洞的原理 2.越权漏洞的分类 3.越权漏洞产生的原因 一、越权漏洞介绍 越权漏洞指的是应用在检查授权时存在纰漏,可以让攻击者获得低权限用户账户后,利用一些方式绕过权限检查,可以访问或者操作其他用户或者…

如何选择振动传感器?实现设备健康监测和预测性维护的第一步

随着工业设备的日益复杂和关键性的增加,设备健康监测和预测性维护成为保障生产效率和设备可靠性的关键要素。而振动传感器作为常用的监测工具,在设备健康监测中扮演着重要角色。 图.设备监测(iStock) 本文将介绍如何选择振动传感…

聊聊公司技术上的奇葩规定——计算机使用

首先说明下公司的技术架构。 MySQL PHP Java,纯互联网应用,Docker 容器部署微服务在 AWS 上面。 数据上没有过多敏感性,不涉及到很多敏感数据,身份识别信息通常使用的是第三方平台,我们本地不存储用户身份信息。 电…

跟着LearnOpenGL学习6--变换

文章目录 一、前言二、向量2.1、向量与标量运算2.2、向量取反2.3、向量加减2.4、长度2.5、向量相乘 三、矩阵3.1、矩阵的加减3.2、矩阵的数乘3.3、矩阵相乘 四、矩阵与向量相乘4.1、单位矩阵4.2、缩放4.3、位移4.4、旋转4.5、矩阵的组合 五、变换实战5.1、GLM配置5.2、GLM测试5…

学习HTTP2

这是有关HTTP最后一部分内容的学习啦~今天一起来学习HTTP/2! HTTP2 HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接…

javaweb session与cookie

Cookie Cookie是本地的存储数据,是键值对 注意一定要使用resp.addCookie才能返回cookie cookie修改 修改的话也是调用addCookie,对相同key的进行修改,作用于set-cookie响应头。 可以新建cookie,add进去,也可以在用户传…