Python全局变量和局部变量
目录
1.变量的作用域
1.1变量产生的底层原理
①执行a = 3
时
栈中产生全局变量
a
\color{red}{a}
a ,堆中创建了
i
n
t
\color{purple}{int}
int 对象,
v
a
l
u
e
\color{orange}{value}
value 为
3
\color{green}{3}
3,
t
y
p
e
\color{orange}{type}
type 为
i
n
t
\color{green}{int}
int,再把该对象的
i
d
\color{orange}{id}
id 给了栈中的全局变量
a
\color{red}{a}
a 。
此时全局变量
a
\color{red}{a}
a 指向了值为
3
\color{green}{3}
3 的对象。
②在 def text01():
时,
栈中产生全局变量
t
e
x
t
01
\color{red}{text01}
text01 ,栈中产生函数对象,并将函数对象的
i
d
\color{orange}{id}
id 给
t
e
x
t
01
\color{red}{text01}
text01。
此时
t
e
x
t
01
\color{red}{text01}
text01 指向函数对象。
③text01()
调用函数时,栈中产生一个栈帧,在栈帧中产生局部变量
b
\color{blue}{b}
b,堆中创建了
i
n
t
\color{purple}{int}
int 对象,
v
a
l
u
e
\color{orange}{value}
value 为
4
\color{green}{4}
4,
t
y
p
e
\color{orange}{type}
type 为
i
n
t
\color{green}{int}
int,再把该对象的
i
d
\color{orange}{id}
id 给了栈帧中的局部变量
b
\color{blue}{b}
b 。
此时局部变量
b
\color{blue}{b}
b 指向了值为
4
\color{green}{4}
4 的对象。
⚠️PS:调用函数时,在栈里产生一个 栈 帧 \color{red}{栈帧} 栈帧(函数调用完后就没有了),局部变量在栈帧中创建,随着栈帧消失而消失。
2. 函数内部使用未定义的局部变量
函数内部使用未定义的局部变量,并且有跟它重名的全局变量
3.函数内变量(局部变量)和全局变量重名
4.函数内部修改全局变量
如果要在函数内改变全局变量的值,需要增加 global
关键字声明。
5.打印函数内的全局变量和局部变量
在函数体内使用locals()
和globals()
函数可以分别打印函数内的全局变量和局部变量。
6.全局变量和局部变量的效率
测试表明,局部变量的效率比全局变量高。