python变量按其作用域可分为_python笔记-变量的作用域

一、python变量的作用域

python中, 所有变量并不是在哪个位置都可以访问的。访问权限取决于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称

全局变量: 定义在函数外部的变量

在函数内部, 可以访问全局变量, 不能进行修改

局部变量: 定义在函数内部的变量

只能在函数内部访问, 在函数外部不能访问

num = 0 # 全局变量

def sum(arg1, arg2):

# 返回两个参数的和

num = arg1 + arg2 # num在这里是局部变量

print('局部变量:', num)

return num

sum(10, 5)

print('全局变量:', num)

python中的4种作用域

按照从上到下依次对变量进行搜索

局部作用域

嵌套的父级函数的局部作用域(闭包外层函数作用域)

全局作用域

内建作用域

二、python作用域的产生

模块(modules)

类(class)

函数(def, lambda)

以上三类才会引入新的作用域

其它的代码块(如if、try、for等)是不会引入新的作用域的

三、修改不同作用域变量的值

局部作用域修改全局作用域(global)

global_int = 10 # 全局变量

def fun():

global global_int

print("函数内部未修改前", global_int) # 未修改前

global_int += 10

print("函数内部修改后", global_int)

print("函数外部未执行函数fun", global_int)

fun()

print("函数外部执行函数fun", global_int)

运行结果:

函数外部未执行函数fun 10

函数内部未修改前 10

函数内部修改后 20

函数外部执行函数fun 20

global: 声明全局变量,要对函数外部变量进行修改时, 就可以使用global声明要修改的变量

外层作用为非全局作用域(nonlocal)

def func_test():

test_var = 10

def test():

nonlocal test_var

print(f"内层函数test未修改: test_var:{test_var}")

test_var += 10

print(f"内层函数test修改后: test_var:{test_var}")

print(f"外层函数func_test未执行内层函数test: test_var:{test_var}")

test()

print(f"外层函数func_test执行内层函数test: test_var:{test_var}")

func_test()

执行结果:

外层函数func_test未执行内层函数test: test_var:10

内层函数test未修改: test_var:10

内层函数test修改后: test_var:20

外层函数func_test执行内层函数test: test_var:20

nonlocal: 嵌套作用域中, 内层作用域要修改外层作用域的变量时, 使用nonlocal关键字声明局部变量

你可能感兴趣的:(python变量按其作用域可分为_python笔记-变量的作用域)