函数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
共有 0 条评论