文章目录
1. 拆包和交换变量值
1.1 拆包
拆包:把组合形成的元组形式的数据,拆分出单个元素内容。
变量名1,变量名2,... = 结果
实例:
(1)在一个函数中,使用return返回求解两个数的和、差;
(2)使用items()方式遍历处理字典中存储的学生信息各个键与值;
(3)分别使用拆包方式来拆分数据。
# 1. 定义函数,返回多个数据
def get_sum_sub(x,y):
sum = x + y
sub = x - y
return 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 + y
return 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 = 100
y = 200
print(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 True
return 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 = 0
i = 0
while i < month:
temp_ret += day_lists[i]
i += 1
# +当前日期
days = temp_ret + day
return 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)}天.")
标签:函数,get,python,sum,拆包,year,print,lambda
From: https://blog.csdn.net/m0_70882914/article/details/142374312