# 函数进阶
# 命名空间和作用域
# 命名空间 有三种
# 内置命名空间——python解释器
# 就是python解释器一启动就可以使用的名字存储在内置命名空间
# 内置的名字再启动解释器的时候加载进内存里
# 全局命名空间——我们写的代码,但不是函数中的代码
# 是在程序从上到下被执行的过程中依次加载进内存的
# 放置了我们所有变量名和函数名
# 局部命名空间——函数
# 就是函数内部定义的名字
#当调用函数的时候才会产生这个名称空间,随着函数执行的结束,这个命名空间回收
# 在局部,可以使用全局、内置空间中的名字
# 在全局,可以使用内置空间中的名字,但是不能使用局部空间中的名字
# 在内置,不可以使用全局、内置空间中的名字
# 当我们定义了和内置空间名字空间中同名的名字时,会使用全局的名字
# 在正常情况下直接使用内置的名字
# 当此命名空间有的时候,就不会使用上一级的
# 如果自己没有,就向上一级要
# 多个函数拥有多个独立的局部命名空间,不互相共享
def input():
print(‘haha‘)
def func():
input()
func()
# func()
# fun--->函数的内存地址
# 函数名()函数的调用
# 函数的内存地址()函数的调用
# 作用域 2种
# 全局作用域——作用在全局——内置和全局名字空间中的名字都属于全局作用域
# 局部作用域——作用在局部——函数(局部名字空间中的名字属于局部作用域)
#
a=1
def func():
global a
a=3
func()
print(a)
# 对于不可变数据类型,在局部可以查看全局作用域中的变量
# 不可以修改
# 若想要修改,需在程序的一开始添加global声明
# 如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效
a=1
b=2
def func():
x = ‘aaa‘
y = ‘bbb‘
print(locals())
print(globals())
func()
print(globals())
print(locals())
# globals 永远打印全局名字
# locals 输出什么根据locals所在位置
a = 1
def func():
a = 2
return a
a = func()
print(a)
原文:https://www.cnblogs.com/Mr-Feng/p/10800492.html