python函数的作用域和名称空间

#!/usr/bin/python
# -*- coding utf8 -*-

'''
三种名称空间
内置名称空间

'''
#1.内置名称空间 随着Python解释器的启动产生
print(sum)
print(max)

#查看内置的所有
import builtins
print(dir(builtins))

for i in dir(builtins):
    print(i)

#全局名称空间:文件的执行会产生  指的是文件级别定义的名字

x  = 1
if x == 1:
    y = 2

# 局部名称空间的有类级别  函数级别  模块级别   只在调用时临时绑定 结束调用即结束
class foo():
    x = 's'
    pass
#import this   查看 Namespaces are one honking great idea -- let's do more of those!


#作用域:全局作用域globals(内置名称空间/全局名称空间) 局部作用域locals(局部名称空间)



#名字的查找顺序: 局部名称空间 -->全局名称空间 -->内置名称空间
x = 1
def func():
    x =2
    print(x)
    print(locals())         #查看局部的作用域
    print(globals())
func()

print(globals())   #结果可以看到定义的变量x和函数func 以及 内置的名字builtins
#print(locals())




#--------------------------------------------------------------------------
#全局作用域:全局有效,在任何位置都能被访问到,除非del删掉,否则会一直存活到文件执行完毕

#局部作用域的名字:局部有效,只能在局部范围调用,只在函数调用时才有效,调用结束就失效
x=1
#示例 全局可调用
def f1():
    print(x)

def foo():
    print(x)
#示例优先调用局部
def f(x):
    # x=4
    def f2():
        # x=3
        def f3():
            # x=2
            print(x)

        f3()
    f2()

f(4)  #等同于函数内定义x=4 

你可能感兴趣的:(Python)