函数的作用域和匿名函数

发布时间 2023-08-23 00:54:32作者: 小甘要努力了

一、匿名函数:

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也是一样的

运行截图:

 如果不声明全局变量,那么函数里面不能修改函数外部变量

 局部的可以拿全局,全局不可以拿局部的