python学习笔记----函数进阶(七)

一、函数多个返回值

def test_return():
    x = 1
    y = "hello"
    z = True
    return x, y, z

a, b, c = test_return()

print(a)
print(b)
print(c)


二、函数多种传参方式

2.1 函数参数种类

根据使用方式上的不同,函数有4种常见参数的使用方式:

  • 位置参数
  • 关键字参数
  • 缺省参数
  • 不定长参数

2.2 位置参数

  • 位置参数:调用函数时,根据函数定义的参数位置来传递传输
  • 传递的参数和定义的参数的顺序个数必须一致

示例:

def user_info(name, age, gender):
    print(f"名字:{name},年龄:{age},性别:{gender}")

user_info("Tom", 20, "男")


2.3 关键字参数

  • 关键字参数:函数调用时通过键 = 值 形式传递采纳数
  • 作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
def user_info(name, age, gender):
    print(f"名字:{name},年龄:{age},性别:{gender}")

# 关键字传参
# 可以不按照固定顺序
user_info(age = 20, name = "小明", gender = "男")

# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info("小明", gender = "男", age = 20)

2.4 缺省参数

  • 缺省参数:缺省参数(也称为默认参数)是函数定义中为参数指定的默认值。当调用函数时,如果没有为具有默认值的参数提供实际的参数值,那么将自动使用这个默认值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
  • 作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值
def user_info(name, age, gender = "男"):
    print(f"名字:{name},年龄:{age},性别:{gender}")


user_info("小天", 20)   # 名字:小天,年龄:20,性别:男

2.5 不定长参数

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

2.5.1 不定长参数—位置传递

  • 用途:*args 用于收集额外的位置参数(那些没有被命名的参数),这些参数被封装成一个元组。
  • 定义方式:在参数名前加一个星号 * 来定义,如 *args

示例:

def user_info(*args):
    print(args)

user_info(1, 2, 3, "小明")    # (1, 2, 3, '小明')

2.5.2 不定长参数—关键字传递

  • 用途:**kwargs 用于收集那些关键字参数,这些参数没有在函数定义中直接命名。这些参数被封装成一个字典。
  • 定义方式:在参数名前加两个星号 ** 来定义,如 **kwargs
def user_info(**kwargs):
    print(kwargs)

user_info(name = "小王", age = 11, gender = "男")    #{'name': '小王', 'age': 11, 'gender': '男'}


三、匿名函数

3.1 函数作为参数传递

场景描述:
假设我们正在编写一个购物应用,需要根据不同的促销策略来计算商品的最终价格。我们可以定义几种不同的促销计算函数,然后将这些函数作为参数传递给另一个函数,这个函数负责应用这些促销策略来显示最终价格。

def no_discount(price):
    """不打折,返回原价"""
    return price

def ten_percent_discount(price):
    """打九折"""
    return price * 0.9

def twenty_percent_discount(price):
    """打八折"""
    return price * 0.8

# 主函数
def apply_discount(price, discount_function):
    """应用折扣策略计算最终价格"""
    final_price = discount_function(price)
    print(f"经过促销策略处理后的价格为:¥{final_price:.2f}")


# 商品原价
original_price = 100

# 不使用折扣
apply_discount(original_price, no_discount)

# 使用10%折扣
apply_discount(original_price, ten_percent_discount)

# 使用20%折扣
apply_discount(original_price, twenty_percent_discount)

  • 通过将函数作为参数传递,我们的 apply_discount 函数变得非常灵活和可重用,它可以与任何符合标准的促销策略函数配合使用。这种设计使得你可以很容易地增加新的促销策略,而无需修改 apply_discount 函数的代码。此外,这种方法也便于测试和维护,因为每个促销策略都是独立的,可以单独测试和修改。

3.2 lambda匿名函数

  • lambda 函数是一种简洁的定义匿名函数的方式。lambda 函数本质上就是一个没有名字的小函数,它们经常用于需要一个函数的场合,但该函数又足够简单以至于不值得单独定义。

语法:lambda 传入参数: 函数体(一行代码)

classify = lambda x: "偶数" if x % 2 == 0 else "奇数"
print(classify(3))  # 输出: 奇数
print(classify(2))  # 输出: 偶数

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

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

相关文章

带权并查集

续前章节:并查集及应用 目录 1 带权问题1.1 点带权1.2 边带权 2 例题2.1 家族合并2.2 信息传递2.3 [NOI2002] 银河英雄传说 1 带权问题 1.1 点带权 用num[i]记录节点 i i i 所在的集合的数量。 初始化:所有的num[i]都是 1 1 1,因为每个点…

公考学习|基于SprinBoot+vue的公考学习平台(源码+数据库+文档)

公考学习平台目录 目录 基于SprinBootvue的公考学习平台 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 视频信息管理 5.3公告信息管理 5.4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

Spring 原理

🎥 个人主页:Dikz12🔥个人专栏:Spring学习之路📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 Bean的作用域 代码实现 观察Bean的作用域 Bean的生命周期 Spring …

[单片机课设]十字路口交通灯的设计

题目要求: 模拟交通灯运行情况。南北绿灯亮30秒,南北黄灯亮3秒,东西红灯亮33秒;南北红灯亮33秒,东西绿灯亮30秒,东西黄灯亮3秒;要求数码管同步显示时间的倒计时,用定时器实现延时。…

Java_从入门到JavaEE_07

一、数组的排序(冒泡排序) 原理: 从下标“0”开始,相邻两个元素依次进行比较,每次找出最大的往后移动。 规律:N个数字来排队,两两相比小靠前,外层循环N-1,内层循环N-1-i…

error LNK2001: 无法解析的外部符号 “__declspec(dllimport) public: __cdecl ......

运行程序时,报如上图所示错误,其中一条是: ReflectionProbe.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl osg::Object::Object(bool)" (__imp_??0ObjectosgQEAA_NZ) 报这个错误一般是因为…

MongoDB详解

目录 一、MongoDB概述 1.MongoDB定义 2.MongoDB主要特点 2.1文档 2.2集合 2.3数据库 2.4数据模型 二、安装MongoDB 1.Windows安装MongoDB 1.1下载MongoDB 1.2安装MongoDB 1.3配置MongoDB 1.3.1可能遇到的问题 1.4安装一盒可视化工具 2.Linux安装MongoDB 2.1下载…

鸿蒙内核源码分析(用栈方式篇) | 程序运行场地谁提供的

精读内核源码就绕不过汇编语言,鸿蒙内核有6个汇编文件,读不懂它们就真的很难理解以下问题. 1.系统调用是如何实现的? 2.CPU是如何切换任务和进程上下文的? 3.硬件中断是如何处理的? 4.main函数到底是怎么来的? 5.开机最开始发生了什么? 6.关机…

WPF之XmlDataProvider使用

1,WPF XAML支持数据提供(DataProvider),但其提供的数据只供查看不可进行修改,删除,添加等。 数据提供者都继承自System.Windows.DataSourceProvider类,目前,WPF只提供两个数据提供者…

Stream流操作

看到Stream流这个概念,我们很容易将其于IO流联系在一起,事实上,两者并没有什么关系,IO流是用于处理数据传输的,而Stream流则是用于操作集合的。 当然,为了方便我们区分,我们依旧在这里复习一下…

深度学习:基于Keras,使用长短期记忆神经网络模型LSTM和RMSProp优化算法进行销售预测分析

前言 系列专栏:【机器学习:项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月5日,星期日

每天一分钟,知晓天下事! 2024年5月5日 星期日 农历三月廿七 立夏 1、 近日国际金价大幅震荡,跌至近一个月新低。 2、 2024亚洲少年攀岩锦标赛:中国选手包揽U14和U12速度赛男女组前三名。 3、 马来西亚将进一步优化中国游客入境程…

【详细教程】手把手教你开通YouTube官方API接口(youtube data api v3)

文章目录 一、背景调查1.1 youtube介绍1.2 分析价值与意义1.3 API接口介绍 二、申请接口权限2.1、注册Google账号2.2、创建项目2.3、启用youtube data api v3服务2.4、创建凭据 三、后续发布 一、背景调查 1.1 youtube介绍 众所周知,youtube是目前全球最大的视频社…

MyCat安装配置,及数据分片

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

Python深度学习基于Tensorflow(1)Numpy基础

numpy的重要性不言而喻,一般不涉及到GPU/TPU计算,都是用numpy,常见的np就是这个玩意。其特点就是快!其实如果不涉及到深度学习,还有一个库是很重要的,scipy,集成了很多的东西。 安装和导入如下…

002-ChatGLM4接入Langchain

智谱AI GLM-4 新一代基座大模型GLM-4,整体性能相比GLM3全面提升60%,逼近GPT-4;支持更长上下文;更强的多模态;支持更快推理速度,更多并发,大大降低推理成本;同时GLM-4增强了智能体能力。 基础能力(英文):GLM-4 在 MMLU、GSM8K、MATH、BBH、HellaSwag、HumanEval等…

[云原生]Docker-compose:一站式多容器应用部署神器

目录 引言 一、Docker Compose 简介 (一)基本信息 (二)核心特性 (三)文件格式 二、Docker Compose 环境安装 (一)准备安装包 (二)添加执行权限 三、…

[Meachines][Hard]Napper

Main $ nmap -p- -sC -sV 10.10.11.240 --min-rate 1000 $ curl http://10.10.11.240 $ gobuster dir -u "https://app.napper.htb" -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-small-words-lowercase.txt -k 博客 $ ffuf -c -w /usr/share/se…

深入学习和理解Django模板层:构建动态页面

title: 深入学习和理解Django模板层:构建动态页面 date: 2024/5/5 20:53:51 updated: 2024/5/5 20:53:51 categories: 后端开发 tags: Django模板表单处理静态文件国际化性能优化安全防护部署实践 第一章:模板语法基础 Django模板语法介绍 Django模…

Windows如何安装hadoop

Hadoop是一个开源的分布式计算平台,旨在处理大规模数据的存储和处理。它提供了分布式文件系统(HDFS)和分布式计算框架(MapReduce),使得用户能够在大规模集群上存储和处理数据。Hadoop最初由Apache软件基金会…
最新文章