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修饰,直接可以访问并修改



  • 相关阅读:
    Ansible批量更新远程主机用户密码
    国外程序员推荐:每个程序员都应该读的非编程书
    FindFriendsServer服务搭建
    Android JNI HelloWorld实现
    2014年4月读书单
    jQuery 之父:每天写代码
    QT210 Android4.0源码编译和烧录文档整理
    Android系统分区理解及分区目录细解
    Android组件Spinner使用
    使用事件驱动模型实现高效稳定的网络服务器程序
  • 原文地址:https://www.cnblogs.com/leolsl/p/13024270.html
Copyright © 2011-2022 走看看