1. 匿名函数
1.1 匿名函数
没有名字的函数。
'''
语法:
函数名 = lambda 形参列表:返回值
相当于
def 函数名(形参列表):
return 返回值
'''
1.2 注意
1)匿名函数的本质还是函数;
2)普通函数中的绝大部分内容匿名函数都支持
1.3 练习
练习1:求任意两个数据的和。
# 普通函数
def sum1(num1: int, num2= 2):
return num1 + num2
# 匿名函数
x = lambda num1,num2= 2: num1 + num2
print(x(10,30)) # 40
print(x(num1=12,num2=33))
print(x(100))
练习2:一个匿名函数判断指定的年是否是闰年。
is_leap_year = lambda year: (year % 4 ==0 and year % 100 != 0) or year % 400 ==0
print(is_leap_year(2022)) # False
练习3:求个位数最大的元素。
# 求最大的元素
nums = [12,39,18,80,34]
print(max(nums))
# 求个位数最大的元素
nums = [12,39,18,80,34]
def func1(x):
return x % 10
print(max(nums, key=func1))
print(max(nums, key=lambda x: x % 10))
练习4:求绝对值最大的元素。
nums = [12,39,-18,-80,34]
print(max(nums, key=lambda x: x**2))
print(max(nums, key=lambda x: -x if x < 0 else x))
2. 变量作用域
2.1 变量作用域
变量作用域即变量使用范围;
根据变量作用域不同,可以将变量分为两种:全局变量、局部变量。
2.2 全局变量
1)定义在函数或者类外面的变量就是全局变量(没有定义在函数里面和类里面的变量就是全局变量);
2)全局变量的作用域:从定义开始到程序结束。
# a是全局变量
a = 10
print('外面a:',a)
# b是全局变量
for b in range(3):
# c是全局变量
c = 20
print('循环里面a:',a)
print('循环里面b:',b)
print('外面b:',b)
print('外面c:',c)
def func1():
print('函数里面a:',a)
print('函数里面b:',b)
func1()
2.3 局部变量
1)定义在函数里面的变量就是局部变量。(形参也是局部变量);
2)局部变量的作用域:从定义开始到函数结束。
# d、e、f都是局部变量
def func1(d,e):
f = 100
print('函数里面:',d,e,f)
func1(2,5)
# print('函数外面:',d,e,f) # 报错!
2.4 global关键字
1)变量能不能使用,看的是使用的时候内存中有没有。
2)定义全局变量的时候,全局变量保存在全局栈区间中,程序结束之后才会被自动释放;
局部变量是保存在函数对应的临时栈区间中,函数调用结束就会被自动释放。
3)global是函数体中的关键字,可以在函数体中修饰变量,让变量在使用和保存的时候都在全局栈中进行。
a. 函数中修改全局变量的值
b. 直接在函数中定义全局变量
aa = 100
bb = 100
def func2():
# 不会修改全局变量aa的值,而是创建一个局部变量aa
aa = 200
print('里面aa:',aa) # 在函数里面使用的是局部变量aa的值
# print(bb) # 报错!global修饰变量必须放在这个变量使用之前
global bb
bb = 200
print('里面bb:',bb)
global cc
cc = 300
func2(