4.0 Python 变量与作用域

举报
王瑞专家 发表于 2023/08/13 09:22:08 2023/08/13
【摘要】 在python中,变量的作用域决定了变量在哪些位置可以被访问。一个程序中的变量并不是所有的地方都可以访问的,其访问权限决定于变量的赋值位置。python中有两种最基本的变量作用域:局部作用域和全局作用域。局部变量是在函数内部定义的变量,只能在其被声明的函数内部访问。而全局变量则是在函数外定义的变量,可以在整个程序的范围内被访问。局部变量只有在其被声明的函数内部才能被访问,全局变量则可以在程序...

在python中,变量的作用域决定了变量在哪些位置可以被访问。一个程序中的变量并不是所有的地方都可以访问的,其访问权限决定于变量的赋值位置。python中有两种最基本的变量作用域:局部作用域和全局作用域。局部变量是在函数内部定义的变量,只能在其被声明的函数内部访问。而全局变量则是在函数外定义的变量,可以在整个程序的范围内被访问。局部变量只有在其被声明的函数内部才能被访问,全局变量则可以在程序的任何地方被访问。变量的作用域对于程序的正确性和可读性非常重要,需要在编写程序时注意变量的赋值位置以及其作用域。

变量的作用域可分为以下几种状态:

  • L(Local):局部作用域
  • E(Enclosing):闭包函数外的函数中
  • G(Global):全局作用域
  • B(Built-in):内建作用域

变量的属性与变量的执行依据:

  • 变量的先后顺序是:L –> E –> G –>B 的规则查找
  • 在子程序中定义的变量称为局部变量
  • 在程序的一开始定义的变量称为全局变量
  • 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序
  • 当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用,在其它地方全局变量起作用
  • 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了
  • 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问

全局变量: 如下定义并使用一个全局变量,来看一下效果吧.

>>> import os
>>> import sys
>>> 
>>> sum=100                      #这就是一个全局变量
>>> 
>>> def print_sum():
    print("函数中调用sum: ",sum)

>>> print_sum()                  #函数中可以读取到
函数中调用sum:  100
>>> 
>>> print("函数外调用sum: ",sum)  #外部依然可以读取到
函数外调用sum:  100

局部变量: 如下定义并使用一个局部变量,来看一下效果吧.

>>> import sys
>>> import os
>>> 
>>> def print_sum():
    sum=100
    print("函数中调用sum: ",sum)

>>> print_sum()
函数中调用sum:  100
>>> print("函数外调用sum: ",sum)
函数外调用sum:  <built-in function sum>

局部转全局: 将一个局部变量通过global关键字,转换为全局变量.

>>> import os
>>> import sys
>>> 
>>> def print_num():
    global num
    num=1000
    print("函数内调用: ",num)

>>> print_num()
函数内调用:  1000
>>> 
>>> print("函数外调用: ",num)
函数外调用:  1000

外层非全局: 如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要nonlocal关键字声明一下.

>>> import sys
>>> 
>>> def outer():
    num=100
    def inner():
        nonlocal num             #声明成外层非全局作用域
        num=1000
        print("inner层:",num)
    inner()
    print("outer层:",num)

>>> outer()
inner层: 1000
outer层: 1000

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/43aec37f.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。