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.全局变量和局部变量的效率

测试表明,局部变量的效率比全局变量高。
本文详细解释了Python中变量的作用域概念,包括全局变量和局部变量的区别,如何在函数内部修改全局变量,以及局部变量与全局变量的效率对比。
923

被折叠的 条评论
为什么被折叠?



