码迷,mamicode.com
首页 > 其他好文 > 详细

名称空间与作用域

时间:2017-06-13 19:13:34      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:全局   fine   域名   name   内部函数   类型   生成   产生   数据   

一、名称空间

名称空间分三种:

  1. 内置名称空间
    • Python解释器自带的名字,Python解释器启动就会生成内置名称空间
  2. 全局名称空间
    • 文件级别定义的名字(顶头写,无缩进),都会存放在全局名称空间,执行Python文件时会产生,文件执行完失效
  3. 局部名称空间
    • 定义在函数内部的名字,局部名称空间只有在函数调用时生效,调用完失效

三者的加载的顺序:内置名称空间-->全局名称空间-->局部名称空间

取值顺序为:

  1.  从局部开始取值的顺序:局部名称空间-->全局名称空间-->内置名称空间
  2. 从全局开始取值:全局名称空间-->内置名称空间
x=111         #如果局部空间没有值,那就去全局空间取值
def foo():
    #x=55555  #首先从局部空间取值
    print(x)
foo()

max=222
def foo():
    max=333
print(max)     #首先从全局名称空间取值,没有就去内置名称空间取值
foo()

# x=0    #局部名称空间没有,就在全局名称空间找,如果也没有,就去内置名称空间找,没有,就报错NameError: name ‘x‘ is not defined
# def f1():
# # x=1 #下一级再没有,那就从这一级找
# def f2():
# # x=2 #x=3被注释掉,则往上一级,也就是本级查找
# def f3():
# # x=3 #先从本级查找
# print(x)
# f3()
# f2()
# f1()

 作用域

作用范围为:

  1. 全局作用域:全局名称空间和内置名称空间,属于全局范围,在整个文件的任意位置都能被引用,全局有效
  2. 局部作用域:局部名称空间,属于局部范围,只在函数中可以被引用,局部有效

查找顺序是:局部作用域-->全局作用域

函数对象

函数的第一类对象,指的是函数可以被当做数据传递

  • 可以被引用
  • 可以当做函数的参数
  • 可以当做函数的返回值
  • 可以当做容器类型的元素

 

闭包

闭包函数:函数内部定义的函数称为内部函数,该内部函数包含对外部作用域而不是对全局作用域名字的引用,那么该函数称为闭包函数

 

名称空间与作用域

标签:全局   fine   域名   name   内部函数   类型   生成   产生   数据   

原文地址:http://www.cnblogs.com/Neeo/p/7002949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!