一、匿名函数:lambda
函数名 = lambda 参数: 表达式
1、有名函数
def f2(a, b):
return a + b
print(f2(2, 4)) # 6
2、匿名函数lambda
- [ ] 匿名函数想要自执行:函数名()
f2 = lambda a,b: a + b
print(f2(2, 4)) #6
- [ ] 函数名 = lambda 参数:表达式
li = [1, 4, 69, 378, 96]
print(list(filter(lambda x: x > 80, li))) #[378, 96]
- [ ] 把lambda函数当做参数传入,这样可以实现不同方法
def f2(a, b, func):
result = func(a, b)
return result
num1 = f2(99, 9, lambda x, y: x + y)
num2 = f2(99, 9, lambda x, y: x - y)
print(num1) # 108
print(num2) # 90
- [ ] 实现输入函数的循环执行
def f2(a, b, func):
result = func(a, b)
return result
while True:
flag = input("还要继续输入吗:yes or no ?")
if flag == "yes":
func = input("请输入一个匿名函数:")
func = eval(func) # eval让输入的字符串去执行
num = f2(11, 33, func)
print(num)
else:
print("结束执行")
break
运行结果:
1
二、函数的作用域:变量的作用范围
1、使用函数内部定义的变量
num = 100 #全局变量--全局作用域
def f():
num = 200
print(num)
f() # 200
print(num) # 100
2、注释函数内部变量后,使用的是函数外定义的变量
num = 100
def f():
#num = 200 #局部变量,只在函数内生效,函数外无法拿到---局部作用域
print(num)
f() # 100
3、global函数:在函数内部定义全局变量
- [ ] 使用global函数前:
num = 100 #全局变量——全局作用域
def f1():
num = 200
print(num)
f1() # 200
print(num) # 100
- [ ] 使用global函数后:
num = 100 #全局变量——全局作用域
def f1():
global num # 修改全局变量
num = 200
print(num)
f1() # 200
print(num) # 200
4、nonlocal:若是函数套嵌,内层函数想拿到外层函数的值,则用到nonlocal
- [ ] 若返回的是:f2()
def f1():
num = 1
def f2():
nonlocal num
num += 1
return num
return f2()
num = f1()
print(num) # 2
- [ ] 若返回的是:f2
def f1():
num = 1
def f2():
nonlocal num
num += 1
return num
return f2
num = f1()
print(num()) # 2
5、总结
1、函数内部定义的变量是局部变量,其作用域是局部作用域,函数外无法调用
2、函数外定义的变量是全局变量,其作用域为全局作用域,如果你想要在函数内修改全局变量,需要加“global 变量名”
网友评论