python局部赋值的规则

yipeiwu_com6年前Python基础

复制代码 代码如下:

  myVar = 1

def myfunc():
    myVar += 1

myfunc()
  


   会提示错误:

UnboundlocalError: local variable 'myVar' referenced before assignment

Python提出如下假设:如果在函数体内的任何地方对变量赋值,则Python将名称添加到局部命名空间中。

语句myVar += 1对名称myVar赋值,则myVar是函数myfunc的局部命名空间的一部分,而它当前没有关联值,所以会产生错误。

解决方法:使用global语句

复制代码 代码如下:

myVar = 1

def myfunc():
    global myVar
    myVar += 1

myfunc()

附作用域搜索规则:

L:本地的(Local)

E:封闭的(Eclosing)

G:全局的(Global)

B:内置的(Built-in) 

相关文章

Python中的单下划线和双下划线使用场景详解

Python中的单下划线和双下划线使用场景详解

单下划线 单下划线用作变量 最常见的一种使用场景是作为变量占位符,使用场景明显可以减少代码中多余变量的使用。为了方便理解,_可以看作被丢弃的变量名称,这样做可以让阅读你代码的人知道,这是...

微信跳一跳自动运行python脚本

本文实例为大家分享了微信小程序跳一跳自动运行脚本,供大家参考,具体内容如下 1、压缩包带了adb等必须工具,配置一下环境变量即可 2、Python 直接运行即可 (Python3.6)...

Python实现个人微信号自动监控告警的示例

Python实现个人微信号自动监控告警的示例

wechat_sender 是基于 wxpy 和 tornado 实现的一个可以将你的网站、爬虫、脚本等其他应用中各种消息 (日志、报警、运行结果等) 发送到微信的工具。 运行环境 Py...

Python从使用线程到使用async/await的深入讲解

前言 为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。 请注意,async和await是针对cor...

TensorFlow实现卷积神经网络

TensorFlow实现卷积神经网络

本文实例为大家分享了TensorFlow实现卷积神经网络的具体代码,供大家参考,具体内容如下 代码(源代码都有详细的注释)和数据集可以在github下载: # -*- codin...