什么是变量的作用域
变量能够使用的范围
全局变量和局部变量
-
a. 全局变量 - 没有声明在函数或者类中的变量都是全局变量,函数、循环里都可以使用,全局变量的作用域从声明开始,到整个文件结束
-
b. 局部变量 - 声明在函数或者类中的变量就是局部变量,只在函数与类中,局部变量的作用域是从声明开始,到函数结束
-
总结:当我们在调用函数的时候,系统会自动在栈区间专门为函数开辟一块独立的开辟空间,用来保存在函数中声明的变量(形参也是属于声明在函数中的变量),当函数调用结束后,这个函数对应的栈区间会自动销毁 -- 函数调用过程就是一个压栈过程
全局变量
- 变量a是全局变量
a = 100
-
全局变量 - for in中 ----- 重点
for y in range(5):
print(y)
\# y 可以在循环外中使用,y为全局变量,但是y以最后一次赋值为准
def func1():
print(y)
func1()
print(y)
局部变量
- a. 函数的形参就相当于声明在函数中的变量,所以是局部变量
#num1 是局部
"""
def func2(num1):
print(num1)
func2(10)
\# print(num1) 报错
- 如果全局变量和局部变量重名,那么在局部变量的作用域中使用的是局部变量,相当于在局部变量中重新声明了一个变量,外面使用的是全局变量
aa = 100
def func5():
aa = 200
print('函数里', aa)
func5()
print('外部', aa)
重点 - global - 在函数中声明了一个全局变量,不需要一定在全局中有这个变量
在函数中:
global 变量名 (global只能在函数中使用)
变量名 = 值
重点 - 创建函数,其实是创建一个函数的单独的空间,在这个空间里给局部变量赋值,函数执行结束后,函数的单独空间销毁
重点 - 若用globl在函数中指定全局变量,函数会先在全局中找是否又这个变量,有就用全局变量,没有的话,就重新在全局变量中声明一个新的变量
\# print(cc)
bb = 11
def func6():
global bb
bb = 22
print(bb)
global cc
cc = 200
func6()
print(bb) \# 全局变量被修改了
print(cc)
重点 - nonlocal - 想要在局部的局部中去修改局部变量的值,就使用nonlocal对变量进行说明,前提,父函数里必须要有这个变量
在子函数中使用,将变量不当做局部函数(不重新声明一个变量),而用父函数的这个变量,若父函数没有,就报错SyntaxError: no binding for nonlocal 'abc' found
def func11():
abc = 123
print('func11', abc)
def func12():
nonlocal abc \# abc 为父函数里的同名变量
abc = 333
print('func12', abc)
func12()
print('func11', abc)
func11()
list1 = []
for i in range(1,6):
list1.append(lambda x: x + i)
print(list1)
print(list1[0](2))
重点-在将函数添加进列表的时候,只是将一个函数块放入列表,只有当函数要调用的时候,才会执行函数块中的代码,根据代码情况调用里面的变量
简单意思就是,只是存入了一个函数块,并不会执行代码块,当要调用的时候,才会执行里面的函数
网友评论