名称空间与作用域

# _*_ coding: utf-8 _*_

# 名称空间
# 1.名称空间(Namespaces):指的是在内存空间中存放 名字 与 值内存地址绑定关系
# 2.名称空间分为三大类
# 1、python解释器先启动,因而首先加载的是:内置名称空间
# 2、执行test.py文件,然后以文件为基础,加载全局名称空间
# 3、在执行文件的过程中如果调用函数,则临时产生局部名称空间

# 内置名称空间:存放的是python解释器自带的名字
# 随着Python解释器的启动则产生
# Python解释器关闭则销毁

# 全局名称空间:???除了内置和局部都是全局???
# x = 1 # x全局名称
# x=1
# if True:
# y=2
# while True:
# while True:
# while True:
# z=3
# def func():
# pass
#
# 产生:执行python程序时产生
# 销毁:python程序执行完毕后则销毁

# 局部名称空间:在函数内定义的名字
# def foo():
# m = 100
# foo()
# 产生: 在函数调用时临时产生
# 销毁: 在函数调用完毕后则销毁
# 三种名称空间的产生的先后顺序: 内置->全局->局部
# 查找名字的顺序:从当前位置往外一层一层查找
# 如果当前在局部名称空间: 局部->全局->内置
# 如果当前在全局名称空间: 全局->内置
# max=1
# def f1():
# max=2
# # print(max)
# def f2():
# max=3
# print(max)
# f2()
#
# f1()
# print(max)

# len=111
# def foo():
# len=222
# print(len)
# len=111
# foo()

# 作用域:指的是作用范围
#!!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关

# 全局作用域:包含内置与全局名称空间的名字
# 特点:全局存活,全局有效
# 局部作用域:包含局部名称空间的名字
# 特点:临时存活,局部有效

# !!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关
# 示范一:
def f1():
print(xxx)
# xxx=111

def f2():
xxx=222
f1()
f2()

# 示范二:
# xxx=111
# def f1():
# print(xxx)
# # xxx=222
# yyy=222
# print(yyy)
#
# f1()
原文地址:https://www.cnblogs.com/OutOfControl/p/9710447.html