在 Python 中,变量的作用域指的是变量可以被访问的范围。Python 中的变量作用域有两种:

  • 局部作用域:变量在函数函数内部的时候,只能在函数内部使用。这样的变量被称为局部变量。

    • 如果在函数内部定义了一个变量,那么该变量只能在函数内部使用,如果想要在函数外部访问该变量,需要使用return语句将其返回。
  • 全局作用域:变量在函数外部定义的时候,可以在任何地方访问。这样的变量被称为全局变量。
    • 如果你在函数外部定义了一个变量,那么该变量可以在任何地方访问,包括函数内部和外部。

global

如果你想在函数内部修改全局变量的值,可以使用global关键字。例如:

x = 10  # 全局变量
def foo():
"""需要注意的是,如果在内部定义了局部变量,那么在这之前访问该变量将会报错"""
x = 30
print("函数内部尝试修改全局变量x为", x) # 函数内部尝试修改全局变量x为 30
foo()
print("最终的全局变量x", x) # 最终的全局变量x 10
def foo1():
"""在这里,如果在global声明之前访问了x,那么x就会被定义为局部变量,那么再次声明global x 将会报错"""
global x
x = 20 # 修改全局变量
print("函数内部尝试使用global修改x为", x) # 函数内部尝试使用global修改x为 20
foo1()
print("最终的全局变量x为", x) # 最终的全局变量x为 20

在上面的代码中,我们使用global关键字在函数内部声明了x为全局变量。然后在函数内部修改了x的值。最后,在函数外部打印x的值,输出的结果为20。

需要注意的是,在使用global关键字之前,必须先在函数外部定义该全局变量。否则,Python 会将该变量视为局部变量,而不是全局变量。

此外,在函数内部不要滥用global关键字,应该尽可能地避免修改全局变量的值,以避免出现意外的错误。


nonlocal

nonloca用于在嵌套函数中使用变量,其中变量不应属于内部函数。使用 nonlocal 关键字声明该变量不是局部变量。nonlocal 语句使列出的标识符引用最近的封闭范围中以前绑定的变量,不包括全局变量。nonlocal 关键字不能用于局部或全局变量,因此必须用于引用除全局和局部范围之外的另一个范围中的变量。
下面是一个简单的示例,演示了如何在嵌套函数中使用 nonlocal 关键字:

def outer():
x = "local"
def inner():
nonlocal x # 在 inner 函数中使用 nonlocal 关键字来声明 x 变量不是局部变量
x = "nonlocal" # 在 inner 函数中更改 x 变量的值时,它实际上更改的是 outer 函数中的 x 变量
print("inner:", x)
inner()
print("outer:", x)
outer()
# 输出inner: nonlocal
# 输出outer: nonlocal
关于nonlocal有几点需要注意的
  1. nonlocal 关键字只能在嵌套函数中使用。如果在非嵌套函数中使用 nonlocal 关键字,Python 解释器会抛出 SyntaxError。
  2. nonlocal 关键字不能用于局部或全局变量。它只能用于引用除全局和局部范围之外的另一个范围中的变量。
  3. nonlocal 关键字只能用于已经在封闭范围中绑定的变量。如果在封闭范围中没有找到变量,Python 解释器会抛出 SyntaxError。
  4. nonlocal 关键字不能用于改变不可变数据类型(如字符串、元组或数字)的值。它只能用于改变可变数据类型(如列表或字典)的值。

【Python基础】变量的作用域与global、nonlocal的更多相关文章

  1. 九. Python基础(9)--命名空间, 作用域

    九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...

  2. Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  3. 十一. Python基础(11)—补充: 作用域 & 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

  4. Python基础-变量作用域

    1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...

  5. Python开发【第十二篇】python作用域和global nonlocal

    python的作用域 作用域也叫名字空间,是访问变量时查找变量名的范围空间 python中的四个作用域 LEGB 作用域 英文解释 英文缩写 局部作用域 Local(function) L 外部嵌套函 ...

  6. python基础11_函数作用域_global_递归

    看到了一个16进制转换的小知识点,就验证了一下运行结果. #!/usr/bin/env python # coding:utf-8 # 看到了16进制转换的问题.顺便验证一下. a = 255 b = ...

  7. Python中变量的作用域

    一.变量作用域的含义 变量的作用域说白了就是变量的值从哪里获取,或者说变量取值的地方 我们在写代码过程中会用到很多变量,这些变量会出现在各种代码块中,有的出现在函数块里,有的在函数块外,例如: def ...

  8. Python基础知识笔记-作用域

    Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的. 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python的作用域一共有4种,分别是: ...

  9. python基础——变量

    变量是只不过保留的内存位置用来存储值.这意味着,当创建一个变量,那么它在内存中保留一些空间. 根据一个变量的数据类型,解释器分配内存,并决定如何可以被存储在所保留的内存中.因此,通过分配不同的数据类型 ...

  10. Java基础 变量的作用域

    变量的作用域: 1. Java用一对大括号作为语句块的范围,称为作用域. 2.作用域中的变量不能重复定义. 3.离开作用域,变量所分配的内存空间将被JVM回收. public void name(){ ...

随机推荐

  1. windows服务器部署mysql

    一.Mysql安装教程就不上传了,百度很多的很详细的. 二.配置环境变量:我的电脑右键=>属性=>高级系统设置=>环境变量=>系统变量下找到Path,选中编辑, 变量值后面添加 ...

  2. Linux 复制时排除某文件/目录

    如果要排除/home/data目录下面的a.b.c.三个目录,同时拷贝其它所有目录,执行rsync命令yum install rsync -y #安装rsync 排除单个文件/目录rsync -avP ...

  3. 【帆吖】Java学习零基础21

    数组 1 package array; 2 3 public class Demo1 { 4 public static void main(String[] args) { 5 int[ ] num ...

  4. win10下Word点击链接跳转,提示“由于本机的限制,该操作已取消”

    Word按住Ctrl点击链接进行跳转,提示"由于本机的限制,该操作已取消,请联系管理员" 网上很多,修改注册表 这边要说的是,修改重启word ,还不行的解决方法:点开任务管理器- ...

  5. 谷歌翻译不能用解决办法(谷歌翻译关闭后,如何继续使用Chrome浏览器的翻译功能?)

    1.查找 IP   虽然谷歌不再提供 translate.google.cn 网页版的服务了,但谷歌翻译的 API 服务还在. 只需要通过 hosts 重定向至国内服务器,即可恢复使用. 1.Ping ...

  6. Spring设计模式——单例模式

    单例模式 单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点. 单例模式是创建型模式. 饿汉单例模式 饿汉单例模式在类的加载时候就立即初始 ...

  7. PatriotCTF 2022 RE

    PatriotCTF 2022 RE String Cheese ida 打开 Shift+F12 即可得到flag PCTF{d0nt_string_m3_410ng_b3_my_v413ntin3 ...

  8. 树状分级框架UI实例

    树状分级框架UI实例:(内容参考https://zhuanlan.zhihu.com/p/108485875) #coding:utf8 #!/usr/bin/env python #@author: ...

  9. KMP 自动机,孤独的自动机(同时也是CF1721E的题解)

    给定字符串 \(s\),以及 \(q\) 个串 \(t_i\),求将 \(s\) 分别与每个 \(t_i\) 拼接起来后,最靠右的 \(|t_i|\) 个前缀的 border 长度.询问间相互独立. ...

  10. java网络编程--2 IP,端口,通信协议,TCP/UDP对比

    java网络编程--2 IP,端口,通信协议,TCP/UDP对比 1.3.IP ip地址:InetAddress 唯一定位一台网络上的计算机 127.0.0.1 :本机localhost IP地址的分 ...