python函数三:拆包和交换变量值、引用、匿名函数

文章目录

  • 1. 拆包和交换变量值
    • 1.1 拆包
    • 1.2 交换变量值
  • 2. 引用
    • 2.1 了解引用
    • 2.1 把引用当作参数传递
  • 3. 匿名函数
    • 3.1 lambda语法
    • 3.2 lambda的应用
    • 3.3 使用使用函数形式来求解某天是该年的第几天?

1. 拆包和交换变量值

1.1 拆包

拆包:把组合形成的元组形式的数据,拆分出单个元素内容。

变量名1,变量名2,... = 结果

实例:
(1)在一个函数中,使用return返回求解两个数的和、差;

(2)使用items()方式遍历处理字典中存储的学生信息各个键与值;

(3)分别使用拆包方式来拆分数据。

# 1. 定义函数,返回多个数据
def get_sum_sub(x,y):sum = x + ysub = x - yreturn sum, sub
result = get_sum_sub(2,3)
print(result)
result[0]
result[1]# 2. items()处理
student = {"name":"刘向阳","age":23,"gender":"男"}
for item in student.items():print(item)key = item[0]value = item[1]# 3. 拆包
ret1,ret2 = get_sum_sub(2,3)
print(f"和为:{ret1}")
print(f"差为:{ret2}")for (key,value) in student.items():print(f"{key}:{value}")

总结

  • 当要把一个组合的结果快速获取元素数据时,可以使用拆包来完成。
  • 对列表、元组数据结果,都可以使用拆包方式。

1.2 交换变量值

使用拆包方式可以用于交换变量的值。
在这里插入图片描述
注意
交换两个变量的方式较多,但最简单的是:直接使用拆包方式交换值。

2. 引用

2.1 了解引用

引用可以通俗的称为内存地址值。在Python中,引用有两种表现形式:

(1)十进制数 5040624

(2)十六进制数 0x45AC6 [后期讲解]

注意:在Python中,变量值是通过引用来传递的。

查看引用语法:

id(变量名)

说明:可以把id()值理解为变量所在内存的地址值。

实例:
(1)定义一个变量a,查看变量的引用值;

(2)思考:有两个列表变量[1, 2],分别使用==和is去比较,结果如何?

# 1.定义变量,查看引用
a = 10
print(a)
print(id(a))
# 明确: 内存地址值是随机分配# 2. == is
# is比较的是内存地址值
# ==比较内容值
list1= [1,2]
list2 = [1,2]
print(list1 == list2)  # True
print(list1 is list2)  # False
print(id(list1))
print(id(list2))

注意

  • 比较两个变量的值是否相等时,使用==
  • 比较两个变量的内存地址值是否相同时,使用is关键字。

2.1 把引用当作参数传递

如果在定义函数时设定了参数,则在调用函数时也需要传递参数值。而给函数传递参数本质就是:把引用当作参数进行传递。
实例:
(1)定义有一个参数的函数,并在调用函数时传递一个参数值;

(2)同时输出参数值与在函数内的参数的引用值,对比效果。

# 1.定义有参数的函数
def fn(a):print("====================")print(f"a的引用值:{id(a)}")print("====================")# 2.外面输出、函数内输出
number = 10
print(id(number))
fn(number)

总结:当把变量传递给函数时,本质上是传递变量的引用值。

3. 匿名函数

3.1 lambda语法

定义匿名函数需要使用lambda关键字,可以创建小型匿名函数。

匿名函数表示没有名字的函数,这种函数得名于省略了用def关键字声明函数的标准步骤。

定义匿名函数语法:

lambda 参数列表 : 表达式

调用匿名函数语法:

函数名 = lambda 参数列表 : 表达式
函数名([参数列表])

实例:
(1)求解两个数之和;

(2)使用def定义函数,完成求和操作;

(3)使用匿名函数简化函数求和操作。

# 1. 定义求和函数
def get_sum(x,y):result = x + yreturn result# 2. 调用
print(get_sum(1,2))
print(get_sum)# 3. 匿名函数
get_sum = lambda x,y:x+y
print(get_sum(1,2))
print(get_sum)

3.2 lambda的应用

在实际应用中,为便于简化函数传递处理,我们可以使用lambda表达式作为参数进行传递,但要注意:传递的是一个引用。

再来看一下匿名函数的语法。

定义语法:

lambda 参数列表 : 表达式

调用语法:

函数名 = lambda 参数列表 : 表达式
函数名([参数列表])

实例:
(1)把lambda表达式当作参数传递给函数;

(2)求解两个数之和,注意:在函数中定义变量并传递。

# 1. 定义函数
def get_sum(fn):print("==========================")print(f"输出fn的引用值:{fn}")x = 100y = 200print(f"求和:{fn(x,y)}")print("==========================")# 2. 调用 (传递匿名函数)
# 把引用当作参数直接传递 -闭包
get_sum(lambda x,y:x+y)

3.3 使用使用函数形式来求解某天是该年的第几天?

比如,2023年1月3日是2023年的第3天。

提示:要区分闰年、平年,闰年指的是能被4整除且不能被100整除,或者能被400整除的年份。

# 1.定义函数: 求是否是闰年
def is_run_year(year):"""判断是否是闰年:param year: 年份:return: 是闰年 True;   不是闰年: False"""if (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0):return Truereturn False# 2.求解第几天: 之前月份的总天数+当前日期
def get_days(year, month, day):days = 0# 判断年份# if is_run_year(year):if is_run_year(year) == True:day_lists = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30]else:day_lists = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]# 通过月份数求解之前月份的总天数temp_ret = 0i = 0while i < month:temp_ret += day_lists[i]i += 1# +当前日期days = temp_ret + dayreturn days# 3.输入年月日、调用函数
in_year = int(input("请输入年份:"))
in_month = int(input("请输入月份:"))
in_day = int(input("请输入日期:"))
print(f"{in_year}{in_month}{in_day}日是{in_year}年的第{get_days(in_year,in_month,in_day)}天.")

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

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

相关文章

Fipexide(FPX):植物组织培养中的新兴化学诱导剂AbMole

在植物科学领域&#xff0c;组织培养技术一直是探索植物发育机制和生物技术应用的强大工具。然而&#xff0c;尽管植物生长调节剂如生长素&#xff08;Auxin&#xff09;和细胞分裂素&#xff08;Cytokinin&#xff09;在促进植物愈伤组织形成和再分化中发挥了关键作用&#xf…

数据结构之树(下),你真的懂吗?

数据结构入门学习&#xff08;全是干货&#xff09;——树&#xff08;下&#xff09; 1 堆 (Heap) 1.1 什么是堆 堆 (Heap) 是一种特殊的完全二叉树&#xff0c;分为最大堆和最小堆。 最大堆&#xff1a;每个节点的值都大于或等于其子节点的值&#xff0c;根节点是整个堆的…

一个实用的贴图工具Snipaste

Snipaste贴图工具操作指南 Snipaste 是一个简单但强大的贴图工具&#xff0c;同时也可以执行截屏、标注等功能。 一、安装与启动 下载Snipaste&#xff1a;访问 Snipaste 的官方网站下载合适的安装包。 安装&#xff1a;双击下载的安装包&#xff0c;按照提示完成安装过程。…

简单题88. 合并两个有序数组 (Python)20240920

问题描述&#xff1a; python&#xff1a; class Solution(object):def merge(self, nums1, m, nums2, n):""":type nums1: List[int]:type m: int:type nums2: List[int]:type n: int:rtype: None Do not return anything, modify nums1 in-place instead.&qu…

大模型微调是否具有技术含量?或者说其技术含量究竟有多少?

有句老生常谈的话&#xff1a;一项工作是否具有技术含量取决于你怎么做&#xff0c;这在大模型&#xff08;LLM&#xff09;方向上尤其如此&#xff0c;因为与传统自然语言处理&#xff08;NLP&#xff09;相比&#xff0c;它的上手门槛变得更低了。 我来举些例子&#xff0c;…

基于微信小程序的剧本杀游玩一体化平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的剧…

pdf编辑器免费版哪个好用?8款pdf编辑软件推荐指南,从入门到精通!

在现代数字化办公中&#xff0c;PDF格式以其稳定及兼容性成为了文档分享的首选。然而&#xff0c;处理PDF文件时&#xff0c;您是否曾感到困惑&#xff0c;不知如何进行编辑&#xff1f;无论是添加文本、替换图像&#xff0c;还是压缩文件&#xff0c;找到合适的工具都是关键。…

算法设计与分析(最长公共子序列

目录 最长公共子序列问题描述代码实现输出结果注意事项 小结&#xff1a; 最长公共子序列 最长公共子序列&#xff08;Longest Common Subsequence, LCS&#xff09;问题是计算给定两个序列的最长子序列的长度&#xff0c;这个子序列不要求连续&#xff0c;但需要保持相同的相…

【QML】qml splash 启动界面 实现代码

1. 工程结构 2. 现象 3. 代码 3.1 main.cpp #include <QGuiApplication> #include <QQmlApplicationEngine>int main(int argc, char *argv[]) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #…

华为OD机试 - 字符串划分(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

C语言 结构体和共用体——典型实例:洗发牌模拟

目录 如何表示52张扑克牌&#xff1f; 如何保存一副扑克牌&#xff1f; 如何发牌&#xff1f; 如何设计主函数&#xff1f; 如何模拟洗牌&#xff1f; 如何表示52张扑克牌&#xff1f; 如何保存一副扑克牌&#xff1f; 如何发牌&#xff1f; 如何设计主函数&#xff1f; 如…

前端vue-父传子

父传子的话是在components中创建一个子组件MyTest.vue&#xff0c;并且在父组件中先导入(import MyTest from "./components/MyTest")&#xff0c;再注册&#xff08;在expo二default中写上 compnents:{MyTest}&#xff09;&#xff0c;再使用标签&#xff08;<My…

stm32单片机个人学习笔记5(OLED调试工具)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…

指挥中心操作台怎么布局更合理

在现代社会&#xff0c;指挥中心作为应急响应、监控调度与决策支持的核心区域&#xff0c;其操作台的布局合理性直接关系到工作效率与应急反应速度。一个科学合理的操作台布局&#xff0c;不仅能够提升团队协作效率&#xff0c;还能在关键时刻为决策者赢得宝贵时间。那么&#…

【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑

文章目录 Slim Fly: A Cost Effective Low-Diameter Network Topology文章总结1. 摘要2. indroduction3. 主要工作 主要思想references Slim Fly: A Cost Effective Low-Diameter Network Topology Slim Fly&#xff1a;一种经济高效的小直径网络拓扑 SC’14 Maciej Besta 苏…

吸尘器制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

吸尘器制造行业&#xff0c;作为传统制造业的重要组成部分&#xff0c;也在积极探索如何通过先进技术实现生产模式的创新升级。5G智能工厂与物联数字孪生平台的融合应用&#xff0c;为吸尘器制造业的数字化转型铺设了一条高速通道&#xff0c;不仅极大地提升生产效率&#xff0…

ubuntu如何进行自动mount硬盘(简易法)

1. 找到你ubuntu的disk工具 2. 选中你要mount的盘 3. 点击那个设置按钮 4. 选择edit mount options 5. disable user session defaults 6, 填写Mount Point就可以了&#xff0c; 最后输入一次密码&#xff0c;重启设备就搞定了

stable diffusion 神经网络插件 controlnet 的安装,很详细

stable diffusion 神经网络插件 controlnet 的安装&#xff0c;很详细 一、前言二、下载1、方式一2、方式二 一、前言 学到 stable diffusion 的 controlnet 插件&#xff0c;安装也略微曲折&#xff0c;这里做个记录。 下载前保证 github 能正常访问。 二、下载 1、方式一…

英伟达Jim Fan预测:未来2~3年机器人将迎来“GPT-3时刻”

在这个科技不断进步的时代&#xff0c;我们终将迎来“与机器人共存”的未来。你认为&#xff0c;未来会是人机和平共处&#xff0c;还是《终结者》式未来&#xff1f; 随着科技发展&#xff0c;这个未来似乎近在咫尺。昨日外媒 The Decoder 发文报道&#xff0c;在最近的一次红…

css设置动态数组渲染及中间线平均分开显示

效果图&#xff1a; <template><div class"container"><div v-for"(item, index) in items" :key"index" class"item-container"><span class"item">{{ item }}</span><span v-if"in…