Python之函数-作用域和嵌套函数

Python之函数-作用域和嵌套函数

作用域

  • 一个标识符的可见范围,这就是标识符的作用域。一般常说的是变量的作用域
  • 每一个函数都会开辟一个作用域

作用域分类

  • 全局作用域
    • 在整个程序运行环境中都可见
    • 全局作用域中的变量称为全局变量global
  • 局部作用域
    • 在函数、类等内部可见
    • 局部作用域中的变量称为局部变量,其使用范围不能超过其所在局部作用域
    • 也称为本地作用域local

函数嵌套

  • 在一个函数中定义了另外一个函数
  • 内部函数inner不能在外部直接使用,会抛NameError异常,因为它在函数外部不可见。
  • 其实,inner不过就是一个标识符,就是一个函数outer内部定义的变量而已。

作用域:标识符的可见范围

  • 函数开辟了一个作用域,x被限制在当前函数作用域中,对外不可见
  • 全局的,函数外的变量,对内穿透
  • 本地使用标识符,优先使用当前作用域
  • 优先使用本地定义的局部变量,优先原则
def fn():
    x = 100
    print(x, '~~~~~~~~~~')

# 定义一个函数
x

# 直接执行x会提示报错
# 报错内容:NameError: name 'x' is not defined
fn()

# 直接执行函数
# 返回结果:100 ~~~~~~~~~~
y = 100 

# 定义一个变量y,这个y是global 全局可见
def fn2():
    c = 1000
    print(y)
    print(c)

# y在函数外面,是全局变量,在函数内可以调用全局(global)变量
# c只在fn2函数内定义了,函数外不可直接调用,必须通过fn2函数才能调用
fn2()

# 返回结果:100
# 返回结果:1000
c

# 直接执行c会提示报错,原因是,c只在fn2函数中定义了,global全局中没有定义c
# 报错内容:NameError: name 'c' is not defined

函数嵌套

1. def outer():
2.     o = 65   
3.     def inner(): 
4.         print('in inner', o, chr(o)) 
5.     inner()  
6.     print('in outer', o, chr(o)) 

1. # 函数定义后在内存中开辟一块空间存放
2. # 函数outer中定义一个变量
3. # 函数定义后在内存中开辟一块空间存放
4. # inner函数中定义一个print o,inner没有从outer函数中穿透进来,chr(o)='A' 
5. # 在outer函数下调用inner函数
6. # outer函数中定义一个print o,outer中本来就有变了o,chr(o)='A'
outer()

# 调用了outer函数,所以inner和outer函数都被调用了
# 返回结果:in inner 65 A
# 返回结果:in outer 65 A
chr(65), chr(97), ord('A'), ord('a')

# 调用了outer函数,所以inner和outer函数都被调用了
# 返回结果:('A', 'a', 65, 97)
def outer1():
    o = 65
    def inner():
        o = 97 # 不同语言,表现不一样
        print('in inner', o, chr(o)) # 'in inner' 97 a
    inner()
    print('in outer1', o, chr(o)) # 'in outer1' 65 A
outer1()

# 调用了outer1函数,所以inner和outer1函数都被调用了
# 返回结果:in inner 97 a
# 返回结果:in outer1 65 A

Python之函数-作用域和嵌套函数_第1张图片

JS风格的函数调用与结果显示。

def outer2():
    # o = 65
    def inner():
        o = 97
        print('in inner', o, chr(o))
    inner()
    print('in outer', o, chr(o))
    
# 定义一个outer2函数
outer2()

# 报错原因outer2函数中使用变量o,但是它本身没有变量o,所以报错
# 报错内容:NameError: name 'o' is not defined

你可能感兴趣的:(Python,python,开发语言)