函数的作用域和匿名函数
一、匿名函数:
1、filter函数,可以过滤出列表中大于3的数据,但是使用都需要提前定义一个函数,有没有更加简便的方式呢?
def f(o): # 过滤器
if o>3:
print(o)
list(filter(f,[3,1,5,9,7,10]))
运行截图:
2、匿名函数(lambda后面是空格)
# lambda 参数 : 表达式
print(list(filter(lambda o:o>3,[3,1,5,9,7,10]))) # 不需要使用函数就能够完成
运行截图:
二、函数作用域
思考:
在函数里面也有可以定义变量,那函数里面的变量名如果和函数外面的变量名重名,会相互影响吗?
1、 函数里面可以访问外面的变量,但不可以修改
a=1 # 先声明变量 a # 把外面的当做爸爸 def f(): # 儿子 print(a) f()
运行截图:
2、外部不能访问函数内部变量,函数里面和函数外部变量名可以相同,互相不影响
a=1 # 爸爸 def f(): a=123 print(a) f() # 123 # 函数里面有的这个变量就自己,外面的不可以访问函数里面的变量 print(a) # 打印的是函数外面的a===函数里面和外面的相互不受影响
运行截图:
3、函数里面不能修改函数外部变量
a = 1 # 爸爸 def f(): # 儿子 a = a + 1 # 不可以改变爸爸的变量 print(a) f() # 3 函数里面只可以访问不可以修改
运行截图:
4. global(全局变量) 和 nonlocal(局部变量)
a = 1 # 爸爸 ===称为全局变量 def f(): # 儿子 ===局部变量 global a # 声明外面变量===外面的变量就发生了变化 a = a + 1 # global 声明后可以改变爸爸的变量 print(a) print(id(a)) f() print(a) print(id(a)) # global声明后里外输出的值均为2,id也是一样的
运行截图:
如果不声明全局变量,那么函数里面不能修改函数外部变量
局部的可以拿全局,全局不可以拿局部的