函数作用域

- 函数作用域

  • lambda定义匿名函数
  • 函数外的变量—全局变量
  • 函数内的变量— 局部变量
  • 全局和局部没有任何影响
  • 外部不能访问函数内部变量
  • 函数内部能够访问函数外部变量
  • 函数里面不能修改函数外部变量
  • 函数里面和函数外部变量名可以相同
  • global关键字可以用在任何地方,nonlocal只能用于嵌套函数
  • Python查找一个变量时会按照“局部作用域”、“嵌套作用域”、“全局作用域”和“内置作用域”的顺序进行搜索,前三者我们在上面的代码中已经看到了,所谓的“内置作用域”就是Python内置的那些标识符,我们之前用过的input、print、int等都属于内置作用域。

- 匿名函数,lambda

def f(o):
    if o>7:
        print(o)

print(list(filter(lambda o:o>8,[4,77,22,4,8])))
list(filter(f,[4,77,22,4,8]))  #打印的话会返回none
[77, 22]
77
22
8


a = 5
def f():
    global a   #要用全局变量需声明,且下面的调用会改变了全局原值,覆盖掉原有的全局变量值
    a = a +4
    print(a)
f()
print(a)
9
9


b = 9  #global变量
def k():
    # global b
    # b = b - 4
    b = 10  #局部变量,相当于k1的全局,对于k1而言属于嵌套作用域
    print(b)
    def k1():  #k1的爸爸是k,全局是他爷, 用爷爷global全局,用爸爸nonlocal局部
        nonlocal b
        b = b+1
        print(b)
    k1()  #没有添加调用 ,无法单独K1()

print(b)
k()
print(b)
9
10
11
9


k = 2
def g():
    global k
    k = k+2
    print(k)
    def ng():
        m = k +3 #k是全局变量,g函数的k是可变的,因此调用无需声明?
        print(m)
    ng()
print(k)
g()
print(k)
2
4
7
4


b = 6
def g():
    # global b
    f = b + 2  
    #只是拿来使用,不是定义原本的b,如果是b = b +2这个才需要声明(定义原本值),
    #本身全局变量是哪里都可以直接调用的
    print(f)
    def g2(): #f在g函数里是原本存在的,属于不可变,调用需要声明?
        f = b + 3
        print(f)
    # g2()
g()
8


m = 2  #占内存程序结束时候--》销毁,
def f():
    n = 5  #函数执行完---》销毁
    def f1():
        nonlocal n
        n += 1
        print(n)
    return f1

f()()
6


def f(j):
    a = 5
    def f2():
        nonlocal j
        for i in range(5):
            j += 1
        print(j)
    return f2()

f(6)
11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值