python函数的作用域及关键字详解

yipeiwu_com5年前Python基础

函数的作用域

python中的作用域分4种情况:

  • L:local,局部作用域,即函数中定义的变量;
  • E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
  • G:globa,全局变量,就是模块级别定义的变量;
  • B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

local和enclosing是相对的,enclosing变量相对上层来说也是local。

作用域产生

在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的;def、class、lambda是可以引入新作用域的。

global关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下

count = 10
def outer():
  global count#必须先声明count为全局变量
  print(count)
  count = 100
  print(count)
outer()  

nonlocal关键字

global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量时就需要nonlocal关键字了

def outer():
  count = 10
  def inner():
    nonlocal count #此时count非全局变量,不能用global声明,需要用到nonlocal关键字
    count = 20
    print(count)
  inner()
  print(count)
outer()

作用域小结

(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;

(2)只有模块、类、及函数才能引入新作用域;

(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;

(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python 获取指定文件夹下所有文件名称并写入列表的实例

如下所示: import os import os.path rootdir = "./pic_data" file_object = open('train_list.txt','...

Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】

本文实例讲述了Python开发SQLite3数据库相关操作。分享给大家供大家参考,具体如下: '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进...

Python中变量交换的例子

Python追求简洁,诞生不少运算赋值规则,力求从简,其中就包括两个或者多个变量交换值。 普通语言中 复制代码 代码如下: # 声明变量 a=50 b=10 # 开始交换,先把其中一个值...

基于Python3 逗号代码 和 字符图网格(详谈)

逗号代码 假定有下面这样的列表: spam=['apples','bananas','tofu',' cats'] 编写一个函数,它以一个列表值作为参数,返回一个字符串。该字符串包...

python定时检查某个进程是否已经关闭的方法

本文实例讲述了python定时检查某个进程是否已经关闭的方法。分享给大家供大家参考。具体如下: import threading import time import os impo...