先来看两段代码。

# 代码段一
x = 10def bar():print(x)bar()
# 输出
10
# 代码段二
x = 10def foo():print(x)x += 1foo()
# 输出
Traceback (most recent call last):...
UnboundLocalError: local variable 'x' referenced before assignment

可以看到,第一段代码能够正常工作,然而第二段似乎有些令人意外,为什么呢?

这是因为在对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并隐藏外部作用域中相同命名的变量。我们来看第二段中的代码,foo函数中的最后一个语句给x分配了一个新值,编译器会将其识别为局部变量。因此,前面的print(x)尝试打印未初始化的局部变量时就会导致错误。那想实现在函数内修改函数外部同名变量的功能,应该怎么办呢?

我们可以通过将x声明为全局来访问外部作用域中的变量:

x = 10def foo():global xprint(x)x += 1foo()print(x)
# 输出
10
11

通过global关键字的显式声明,就可以在函数作用域内访问外部作用域中的同名变量并进行值的修改。当然我们也可以通过nonlocal关键字在嵌套作用域中执行类似的操作:

def foo():x = 10def bar():nonlocal xprint(x)x += 1bar()print(x)
foo()
# 输出
10
11

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑

获取一折本站知识星球优惠券,复制链接直接打开:

https://t.zsxq.com/y7uvZF6

本站qq群704220115。

加入微信群请扫码:

【Python基础】当变量有值时,为什么会出现UnboundLocalError?相关推荐

  1. Python基础之变量学习

    Python基础之变量学习 一.变量定义与理解 1.变量意义 2.变量类型 3.变量命名规范 二.变量使用 三.常量的使用 1.常量的理解 2.常量的规范 四.数据的类型 1.数字 2.文字 3.布尔 ...

  2. Python基础——1.变量和简单数据类型

    Python基础--1.变量和简单数据类型 1.0 前言 1.1 运行hello.py 1.2 变量 1.2.1 变量的命名和使用 1.2.2 使用变量时避免命名错误 1.3 字符串 1.3.1 使用 ...

  3. Python基础语法——变量

    一.Python 语言特点 1.简单易学:与C和Java比,Python的学习难度更低一点,更适合新手入门. 2.简洁明了.Python的语法非常简洁,代码量少,非常容易编写. 3.Python 是解 ...

  4. Python基础-高级变量类型

    Python基础-高级变量类型 1.高级变量类型 """ 数值型:int float bool compex 非数值型:str list set dict tuple & ...

  5. Python数据结构与算法(1.2)——Python基础之变量与内置数据类型

    Python数据结构与算法(1.2)--Python基础之变量与内置数据类型 0. 学习目标 1. Python 程序的运行 1.1 Python 交互式解释器 1.2 Python 程序脚本 2. ...

  6. 04 Python基础之变量

    Python基础之变量 一 什么是变量? 二 为什么要有变量? 三 定义变量 四 变量的组成 五 变量名的命名规范 六 变量名的两种风格 6.1 驼峰体 6.2 下划线(推荐) 一 什么是变量? 变量 ...

  7. Python基础知识——变量与运算符

    Python的基础知识一 文章目录 Python的基础知识一 变量的类型 变量--数据的载体 变量的命名 命名规则 变量的使用 总结 Python的运算符 赋值运算符 算术运算符 比较运算符和逻辑运算 ...

  8. Python基础 -- Task01. 变量、运算符与数据类型

    我们准备利用17天时间,将 Python 基础的刻意练习分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task03:列表与元组(2day) T ...

  9. 刻意练习:Python基础 -- Task01. 变量、运算符与数据类型

    背景 我们准备利用17天时间,将 Python 基础的刻意练习分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task03:列表与元组(2day ...

最新文章

  1. 为Mac OS X添加用Firefox搜索服务
  2. Cable--新虚拟网络架构介绍
  3. [转]微擎应用笔记3--manifest.xml文件使用说明
  4. linux 命令find
  5. 基于MySQL的调度系统_仓储调度系统的设计与实现(SSH,MySQL)
  6. [C# 基础知识系列]专题十一:匿名方法解析
  7. RAID磁盘阵列相关技术详解
  8. 永城2021高考成绩查询,永城中考成绩查询2021
  9. 广州考生报深大计算机,抢破头!这所大学既不是985也不是211,为什么广东考生都想上?...
  10. 16位汇编语言第二讲系统调用原理,以及各个寄存器详解
  11. new Integer()与 Integer.valueOf()区别和联系
  12. LaTeX插入多张图片
  13. pandas 生成笛卡尔集
  14. 数据分析+数据挖掘暑期实习碎碎念
  15. centos开机启动后只是一条横杠
  16. 秒杀系统的设计五大原则
  17. 1276 岛屿的数量(思维,谷峰、谷底考虑,边界处理/特殊情况考虑)
  18. 关于父子节点、父子元素、祖辈元素的获取
  19. 中俄边城“丝路欢聚”共庆中国年
  20. 计算机网络---DHCP和自动配置

热门文章

  1. C#字符串处理(String与StringBuilder)
  2. win7 64 iis7+access ADODB.Connection 错误 '800a0e7a'
  3. 关于客户端用ASP参生报表
  4. [Python] Window机器上同时安装Python 2 和 Python 3,如何兼容切换使用?
  5. 12 - 函数式编程
  6. 课后作业:情境二:数据类型与运算符 3、运算符及表达式
  7. 二维LIS(CDQ分治)
  8. 2.1TF模型持久化
  9. 微信 weui 初体验
  10. hdu 1301 Jungle Roads 最小生成树