44、变量作用域

小白量化 2025-12-09 17:05:27 29 举报

1、变量作用域

1.1 含义
变量生效的范围
1.2 分类
(1) 局部作用域  ==>  局部变量
在Python中,局部变量是在函数内部定义的变量。
这些变量仅在定义它们的函数内部可见和可用。一旦退出该函数,它们就超出了作用域,变得不可访问。

# 示例
def func():
   a = 1           # 局部变量,只能在func函数中使用
   print("func:", a)
   
func()

def func2():
   print("func2:", a)
   
func2()              # NameError: name 'a' is not defined
print("外部:", a)   # NameError: name 'a' is not defined

def func(a):    # 形参a也是局部变量
   print("func:", a)
func(1)
print("外部:", a)   # NameError: name 'a' is not defined

(2) 全局作用域  ==>  全局变量
在Python中,全局变量是在函数外部定义的变量。这些变量在程序的整个执行过程中都是可访问的

# 示例1
a = 1        # 全局变量
print("外部:", a)
def func():
   print("func:", a)
func()
def func2():
   print("func2:", a)
func2()
# 示例2
# 全局变量和局部变量命名相同
a = 1             # 全局变量
def func():
   a = 2         # 局部变量
   print("func:", a)
   
print("外部1:", a)
func()
print("外部2:", a)
# 示例3
# 注意:函数中如果有,则使用自己的;没有才往上一层找
a = 1     # 全局变量
def func():
   a = 2
   print("func:", a)
func()
print("外部:", a)

1.3 global
在Python中,global 关键字用于在函数内部声明全局变量。如果想要在函数内部(局部作用域中)定义一个全局变量,或者修改全局变量的值,就需要使用 global 关键

# 示例
a = 1     # 全局变量
def func():
   global a    # 将a声明为全局变量
   a = 2
   print("func:", a)
   
func()
print("外部:", a)

def func():
   global a       # 声明为全局变量
   a = 2          # 局部变量
   print("func:", a)
   
func()
print("外部:", a)

def func2():
   # global a, b, c
   global a
   global b
   global c
   a = 1
   b = 2
   c = 3
   
func2()
print(a, b, c)

1.4 nonlocal【扩展】
用于在内层函数中引用并可能修改外层函数作用域中的局部变量,同时确保这个变量不是在当前函数内部新创建的局部变量,也不是全局变量、
注意:只能在嵌套函数中使用

# 示例1
def outer():
   a = 1          # 外函数的局部变量
   print("outer1:", a)
   def inner():   # 内函数
       nonlocal a
       a = 2      # 内函数的局部变量
       print("inner:", a)
   # 外函数里面,内函数外面
   inner()
   print("outer2:", a)
   
outer()

nonlocal 关键字用于在内函数中修改上一层的函数的局部变量的

# 示例2
a = 2
def outer():
   nonlocal a    # SyntaxError: no binding for nonlocal 'a' found(注意:nonlocal只能在嵌套函数中使用)
   a = 1
   print("outer:", a)
   
outer()
# 示例3
def outer():
    a = 1
    print("outer1:", a)
    def inner():
        a = 2
        print("inner1:", a)
        def inner2():
            nonlocal a
            a = 3
            print("inner22:", a)
        inner2()
        print("inner2:", a)
    inner()
    print("outer2:", a)
    
outer()


量化小白,从0开始学量化! 1

著作权归文章作者所有。 未经作者允许禁止转载!

最新回复 ( 0 )
发新帖
0