Python基础学习之局部和全局作用域

        在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中一种,不能既是局部的又是全局的。

        可以将“作用域”看成是变量的容器。当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。只有一个全局作用域,它是在程序开始时创建的。如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了。局部作用域可以很多个,但是每次执行完就会销毁。


文章目录

1.局部变量不能在全局作用域内使用

2.全局变量可以在局部作用域中读取

3.名称相同的局部变量和全局变量  

4.global 语句


1.局部变量不能在全局作用域内使用

示例代码如下:

def func():
    number = 123
func()
print(number)
# >>>NameError: name 'number' is not defined

        程序报错原因是number变量是局部变量,当程序执行fuc后,返回时就会销毁局部作用域,number就会随之销毁,就不会存在名叫number的变量。所以python会报错找不到number的定义。所以局部变量不能再全局作用域内使用。

2.全局变量可以在局部作用域中读取

示例代码如下:

def func():
    print(number)
    # >>>123
number = 123
func()
print(number)
# >>>123

        因为func函数内,没有变量number,当函数执行时,python会认为它是对全部变量number的引用。所以打印出123。

3.名称相同的局部变量和全局变量  

        在技术上,在 Python 中让局部变量和全局变量同名是完全合法的。示例代码如下:

def func1():
    number = 1
    print(number)
    # >>>1
def func2():
    number = 2
    print(number)
    # >>>2
    func1()
    print(number)
    # >>>2
number = 3
func2()
print(number)
# >>>3

4.global 语句

        如果需要在一个函数内修改全局变量,就使用 global 语句。示例代码如下:

# 4
def func():
    global number
    number = 123
number = 456
func()
print(number)
# >>>123

        因为 number在 func()的顶部被声明为 456,所以当 number被赋值为123时,赋值发生在全局作用域的 456上(没有创建局部 number变量)。

        有 4 条法则,来区分一个变量是处于局部作用域还是全局作用域:

        1.如果变量在全局作用域中使用(即在所有函数之外),它就总是全局变量。

        2.如果在一个函数中,有针对该变量的 global 语句,它就是全局变量。

        3.如果该变量用于函数中的赋值语句,它就是局部变量。

        4.如果该变量没有用在赋值语句中,它就是全局变量。

        在一个函数中,如果试图在局部变量赋值之前就使用它,像下面的程序这样,Python就会报错:    

def func():
    print(number)
    number=456
number=123
func()
# >>>UnboundLocalError: local variable 'number' referenced before assignment

         发生这个错误是因为,Python 看到 func()函数中有针对 number的赋值语句,因此认为 number变量是局部变量。但是因为 print(number)的执行在 number赋值之前,局部变量 numver并不存在。Python 不会退回到使用全局 number变量。


都看到这里了,如果觉得有用就点个赞吧!!

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLGululu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值