首页 » 编程 » Python » 正文

函数2

day21


名称空间与作用域


名称空间可分为3种:

内置名称空间:像print,max,len,import这样内置在解释器中的的,在python启动时便已加载,可随处调用

全局名称空间:针对于当前文件而言,可在当前文件随处调用

局部名称空间:针对于函数内部而言,可在函数内部调用,函数外调用不到


作用域可分为2种:

全局作用域:包括内置名称空间,全局名称空间

局部作用域:包括局部作用域


他们的查找顺序是:

局部–>全局–>内置


例子如下:

# !!!先定义后使用

def foo():
    print("from foo")
    bar()
    
foo()  # <--调用时会出错,因为bar还没有定义

def bar():
    print("print bar")
    
foo()  # <--调用正常


x = 1
def func():
    print("from func")
    x = 2
    print(globals())  # 在局部查全局
    print(locals())  # 在局部查局部,结果只有 {'x': 2}

print(globals())  # 在全局查看全局空间
print(locals())  # 在全局查看局部空间,输出结果与上面一样,因为都在全局查的
func()


函数的嵌套:包括嵌套调用,嵌套定义

嵌套调用:

# 嵌套调用
# 两个数比较大小
def my_max(x, y):
    res = x if x > y else y
    return res


print(my_max(10, 100))


# 四个数比较大小
def my_max4(a, b, c, d):
    res1 = my_max(a, b)
    res2 = my_max(res1, c)
    res3 = my_max(res2, d)
    return res3


print(my_max4(1, 20, 3, 4))


嵌套定义:

# 嵌套定义
def f1():
    x = 1
    print("---->f1:", x)
    def f2():
        x = 2
        print("---->f2:", x)
        def f3():
            x = 3   # 这里如果注释掉没有x=3,则会到外一层去找,由内往外,会找到x=2
            print("---->f3:", x)
        f3()
    f2()
f1()

没有注释掉结果:

—->f1: 1

—->f2: 2

—->f3: 3

注释掉后结果:

—->f1: 1

—->f2: 2

—->f3: 2





发表评论