• python 函数嵌套及作用域


    函数可以嵌套吗?当然可以

     我们可以看到,外部函数outer_func()的函数体中嵌套了一个函数inner_func(),并且outer_func()体中
    还调用了内部函数inner_func(),所以每当调用outer_func()的时候,都会调用一次inner_func(),我
    们来看一下打印结果:

     我们可以看到,内部函数inner_func()被调用了。

    其实,我们可能更加的关心作用域
    我们看如下代码:

     首先,变量a是一个全局变量,变量b是一个局部变量,但需要注意的是该变量位于内部函数inner_func()的外面,
    相当于是一个Enclosed的作用范围。所以,当函数内部要引用全局变量并修改全局变量时,需要用到关键字global,
    内部函数需要用到外部函数的变量并修改时,需要用到关键字nonlocal.
    关于变量作用域,可以参照LEGB原则
    L:Local
    E:Enclosed
    G:Global
    B:Build-in
    那么当访问变量时,会先从Local(局部)寻找,若没有则去下一层Enclosed(闭包域,即外部函数的作用域)中寻找,
    若仍然没有找到则去Global(全局)中寻找,最后去到Build-in(内置关键字)中寻找。

    tips:小范围内可以访问大范围中的变量,注意是访问。如内部函数可以访问外部函数变量和全局变量,当反过来却
    不行,如外部函数访问内部函数的变量。若要修改全局变量或者外部函数的变量,则需要对变量进行关键字修饰,如
    对全局变量进行global 修饰,对外部函数的变量进行nonlocal修饰,这样就能明确应用的是变量是全局的还是外部函
    数的。注意,对应可变变量(如列表,字典)来说,不需要进行global或nonlocal修饰,直接可以访问并修改



  • 相关阅读:
    【SDOI2015】星际战争
    【雅礼联考DAY02】Magic
    【SDOI2015】排序
    【雅礼联考DAY01】逃跑
    【雅礼联考DAY01】数列
    【雅礼联考DAY02】Revolution
    Philips and Calculator
    maven整理——初步
    等价类划分方法分析与应用
    @Autowired
  • 原文地址:https://www.cnblogs.com/leolsl/p/13024270.html
Copyright © 2020-2023  润新知