zoukankan      html  css  js  c++  java
  • 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修饰,直接可以访问并修改



  • 相关阅读:
    指针
    const
    指针数组和指向数组的指针
    extjs初探之由浅入深目录
    ie6字体设置13px引发的问题
    在IAR下通过Jlink将程序直接下载到Flash指定地址
    提高C语言程序运行稳定性的方法
    C/C++编程习惯
    释放QQ占用的C盘空间
    非阻塞算法思想在关系数据库应用程序开发中的使用
  • 原文地址:https://www.cnblogs.com/leolsl/p/13024270.html
Copyright © 2011-2022 走看看