Python学习之路——函数进阶

目录

一、函数的多返回值

(一)如何操作

(二)代码示例

 二、函数的多种传参方式

(一)位置参数

(二)关键字参数

(三)缺省参数

1、定义

2、作用

3、代码示例

4、注意

(四)不定长参数

1、不定长参数的类型

①位置传递

②关键字传递

三、匿名函数

(一)函数作为参数传递

1、举例

2、解释 

3、举例练习

4、总结

(二)lambda匿名函数

1、函数定义中

2、匿名函数定义语法

3、注意


一、函数的多返回值

(一)如何操作

按照返回值的顺序,写对应顺序的多个变量接收即可,变量之间用 逗号 隔开,支持不同类型的数据return

(二)代码示例

# 演示多返回值
def func01():
    return 1, True, 'hi'


def func02():
    num, is_ok, my_str = func01()
    print(num, type(num), '\n', is_ok, type(is_ok), '\n', my_str, type(my_str))

 二、函数的多种传参方式

(一)位置参数

调用函数时根据函数定义的参数位置来传递参数

def func03(name, age, gender):
    print(f'您的名字为:{name},年龄为:{age},性别为:{gender}')


if __name__ == '__main__':
    func03('墨白001', '18', '男')

(二)关键字参数

函数调用时通过“键 = 值”形式传递参数

作用: 

可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

# 关键字参数
def func04(name, age, gender):
    print(f'您的名字为:{name},年龄为:{age},性别为:{gender}')


if __name__ == '__main__':
    # 关键字传参
    func04(name='墨白001', age=18, gender='男')
    # 关键字传参可以不按照顺序进行传参
    func04(gender='男', age=18, name='墨白001')
    # 关键字参数和位置参数混合传参
    func04('墨白001', 18, gender='男')

函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

(三)缺省参数

1、定义

缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

2、作用

当调用函数时没有传递参数,就会使用默认缺省参数的值

3、代码示例

# 缺省参数
def func05(name, age, gender='男'):
    print(f'您的名字为:{name},年龄为:{age},性别为:{gender}')


if __name__ == '__main__':
    # 当不传入值对默认参数进行修改的时候
    func05('墨白001', 18)
    # 当传入值对默认参数进行修改的时候
    func05('墨白001', 18, '帅哥')

4、注意

函数调用时,如果传入参数则修改默认参数值,反之则使用默认参数值

(四)不定长参数

不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景

1、不定长参数的类型

①位置传递
# 位置传参
def func06(*args):
    print(args)


if __name__ == '__main__':
    func06('hello')
    func06('hello', 'world')
    func06('hello', 'world', 'and')
    func06('hello', 'world', 'and', 'hello')
    func06('hello', 'world', 'and', 'hello', 'python')

 传进的所有参数都会被args变量收集,他会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递

②关键字传递
# 关键字传参
def func07(**kwargs):
    print(kwargs)


if __name__ == '__main__':
    func07(name='墨白001', age=18, gender='男')

参数是“键=值”形式的情况下,所有的“键=值”都会被kwargs接收,同时会根据“键=值”组成字典

三、匿名函数

(一)函数作为参数传递

前面的函数一直使用数据作为参数传入:

  • 数字
  • 字符串
  • 字典、列表、元组等

1、举例

接下来可以试试函数作为参数来传递

2、解释 

函数operation,作为参数,传入了func08函数中使用。

  • func08需要一个函数作为参数传入,这个函数需要接收2个数字进行计算,计算逻辑由这个被传入的函数决定
  • operation函数接收2个数字对其进行计算,operation函数作为参数,传递给了func08函数使用
  • 最终,在func08函数内部,由传入的operation函数,完成了对数字的计算操作

所以,这是一种计算逻辑的传递,而非数据的传递。

就像举例代码那样,不仅仅是相加、减、乘、除、模,任何逻辑都可以自行定义并作为函数传入

3、举例练习

# 举例
def func09(speak):
    print('-------输入1,AI将更换为初恋女友-------')
    print('-------输入2,AI将更换为霸道总裁-------')
    print('-------输入3,AI将更换为黄毛小子--------')
    chose = int(input('请输入你的选择\n\t:'))
    speak(chose)


def speak(chose):
    if chose == 1:
        print('切换初恋女友模式成功')
    elif chose == 2:
        print('切换霸道总裁模式成功')
    elif chose == 3:
        print('切换黄毛小子模式成功')
    else:
        print('输入格式有误,即将爆炸')


if __name__ == '__main__':
    func09(speak)

4、总结

  1. 函数本身是可以作为参数传入另一个函数中进行使用的
  2. 将函数传入的作用在于:传入计算逻辑,而非传入数据

(二)lambda匿名函数

1、函数定义中

  • def关键字,可以定义带有名称的函数
  • lambda关键字,可以定义匿名函数(无名称)

有名称的函数,可以基于名称重复使用

无名称的函数,只可临时使用一次

2、匿名函数定义语法

lambda 传入参数:函数体(这个函数体是指—一行代码)

  • lambda是关键字,表示匿名函数
  • 传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数
  • 函数体,就是函数的执行逻辑,要注意:只能写一行,;无法写多行代码
def func08(operation):
    result = operation(1, 2)
    print(result)


if __name__ == '__main__':
    # 匿名函数的演示
    func08(lambda x, y: x + y)

3、注意

  • 匿名函数用于临时构建一个函数,只用一次的场景
  • 匿名函数的定义中,函数体只能写一行代码,如果函数体要写多行代码,不可用lambda匿名函数,应使用def定义带名函数

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

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

相关文章

Spring之代理模式

1、概念 1.1 介绍 二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中…

互联网分布式应用之SpringCloud

SpringCloud Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. 微服务项目介绍 2. Eure…

C++ goto语句

作用:可以无条件跳转语句,类似计算机组成原理mips指令集中的jump直接跳转指令(汇编语言)。 语法:goto标记; 解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的…

小游戏实战丨基于PyGame的贪吃蛇小游戏

文章目录 写在前面PyGame贪吃蛇注意事项系列文章写在后面 写在前面 本期内容:基于pygame的贪吃蛇小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700188 实验环境 python3.11及以上pycharmpygame 安装pygame的命令:…

python实现windows内存看门狗程序(带GUI界面)

python实现windows内存看门狗程序(带GUI界面) 效果图 1、程序核心 看门狗程序核心: 1、运行特定程序任务进程 2、监控任务管理器上的内存使用率 3、如果超过阈值则关闭该特定程序进程 4、重新开启该特定程序 5、重复过程2持续监控2、程序流…

Spring Boot 基础知识点1 (含面试题1)

Spring Boot 是一款基于 Spring 框架的开源应用程序开发工具,它旨在简化 Spring 应用程序的配置和开发过程。Spring Boot 提供了一种简单的方式来创建可独立运行的、生产级别的应用程序,并在需要时进行部署。Spring Boot 在微服务架构和云计算环境下得到…

thinkphp6实现简单定时任务

thinkphp6实现定时任务 创建定时任务文件定义指令编写Test.php代码运行测试 创建定时任务文件 Test类名根据自己的需要修改 php think make:command Test testcommand文件夹在app目录下没有需要自己创建 运行上面的命令后会在command下 多一个Test.php文件 定义指令 在conf…

PHP代码审计之实战审代码篇2

4. 仔细观察如下代码&#xff0c;思考代码有什么缺陷&#xff0c;可能由此引发什么样的问题&#xff1f; <?php require_once("/home/rconfig/classes/usersession.class.php"); require_once("/home/rconfig/classes/ADLog.class.php"); require_onc…

金和OA C6 SAP_B1Config.aspx 未授权漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞描述 金和OA C6 SAP_B1Config.aspx接口 未授权&#xff0c;攻击者可通过此漏洞获取数据库账户密码等敏…

2024最新前端源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 粒子文字动画特效 基于canvas实现的粒子文字动画特效 会来回切换设定的文字特效 图…

postman使用方法指南,最全面的教程

Postman使用教程 一、Postman介绍 ​ Postman是一个英语单词&#xff0c;名词&#xff0c;作名词时意为“邮递员&#xff1b;邮差”。 ​ Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,…

【两阶段鲁棒】计及需求响应的多能互补微网两阶段鲁棒优化matlab

目录 1 主要内容 算例模型 目标函数 第一阶段 第二阶段 求解流程图 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《多能互补微网两阶段鲁棒优化调度研究》&#xff0c;在考虑风光不确定集的基础上提出采用计及DR响应的多能互补微网两阶段鲁棒备用调度模…

ShardingSphere-JDBC学习笔记

引言 开源产品的小故事 Sharding-JDBC是2015年开源的&#xff0c;早期的定位就是一个分布式数据库的中间件&#xff0c;而在它之前有一个MyCat的产品。MyCat也是从阿里开源出来的&#xff0c;作为分库分表的代名词火了很长一段时间&#xff0c;而MyCat早年的目标就是想进入ap…

Python的基础练习题之学生管理系统

需求 使用Python基础写一个基于控制台的学生管理平台&#xff0c;里面功能分别是&#xff1a;1.录入学生信息2.查找学生信息3.删除学生信息4.修改学生信息5.排序6.统计学生总人数7.显示所有学生信息&#xff0c;要求数据存储在文件里。 代码 代码资源地址可以直接下载 效果图…

消除字母Scratch-第14届蓝桥杯Scratch省赛真题第6题

6. 消除字母&#xff08;100分&#xff09; 编程实现&#xff1a;消除字母。 具体要求&#xff1a; 1). 点击绿旗&#xff0c;角色、背景如图所示&#xff08;创建1个字母表&#xff0c;并存入26个字母&#xff09;&#xff1b; 2). 等待1秒&#xff0c;阿拉蕾说&#xff1…

华为VRP系统基础华为ICT网络赛道

目录 1.华为VRP系统概述 3.2.命令视图与使用 3.3.基本配置命令 1.华为VRP系统概述 通用路由平台VRP(Versatile Routing Platform)是华为公司数据通信产品的通用操作系统平台。它以IP业务为核心&#xff0c;采用组件化的体系结构&#xff0c;在实现丰富功能特性的同时&#x…

AIGC学习笔记(1)——AI大模型提示词工程师

文章目录 AI大模型提示词工程师1 Prompt工程之原理1.1 AIGC的发展和产业前景前言AIGC时代的到来发展趋势和应用展望 1.2 大模型的类型和特点大模型的对比上手特点 1.3 大模型技术原理和发展成语接龙和暴力穷举ChatGPT如何理解人类语言如何存储数据图像存储电脑存数字如何让电脑…

【Docker基础二】Docker安装Mysql8

下载镜像 安装mysql&#xff08;版本&#xff1a;8.0.35&#xff09; # 拉取镜像 docker pull mysql:8.0.35 # 查看镜像是否已经下载 docker images 创建挂载目录 # 宿主机上创建挂载目录 (可以不创建&#xff0c;docker run -v配置了挂载目录&#xff0c;docker会自动…

ARMv8-AArch64 的异常处理模型详解之异常等级、执行状态以及安全状态

ARMv8-AArch64 的异常处理模型详解 一&#xff0c;特权和异常等级1.1 异常等级 Exception levels 二&#xff0c;特权的类型2.1 内存特权2.2 访问寄存器的特权 三&#xff0c;执行状态和安全状态3.1 执行状态 Execution states3.2 执行状态切换 3.3 安全状态 Security states3.…

商品期货交易中的强行平仓:交易所的规定和风险控制

在商品期货交易中&#xff0c;保证金充足的情况下&#xff0c;一般不会被强行平仓。然而&#xff0c;有几种情况可能会导致强行平仓的发生&#xff1a; 1 持仓超过交易所限仓规定&#xff1a;交易所会设定限仓规定&#xff0c;限制每位投资者的持仓数量。如果超过限仓规定&…