摘要:当函数被调用时,局部变量进入声明它们的作用域。不管全局域中有没有用到该变量名,函数中使用的将是局部变量。这句话是有歧义的,既可以表示引用全局变量,也可以是创建一个新的局部变量。
在使用变量的时候,有时候会发生变量引用错误,或者程序运行完,程序得到的结果与预期存在差别。
记住一条原则:任何变量在使用前,都必须确保“变量引用是否明确”!
全局变量:作用域是整个脚本,除非被删除掉,否则他们存活到脚本结束,且对于所有函数,他们的值是可以被访问的。
局部变量:作用域局限在定义的函数,依赖于函数现阶段是否处于活动。当函数被调用时,局部变量进入声明它们的作用域。一旦函数完成,变量将会离开其作用域。
我们来看一些例子:
(1)局部变量
函数内部的变量名如果第一次出现,且出现在“=”左边,即被视为定义一个局部变量。不管全局域中有没有用到该变量名,函数中使用的将是局部变量。
ps:此处会报错。因为num首先被当成了一个局部变量,到等号右侧后发现这个变量还没赋值就被用于计算,于是报错。
Num += 100:这句话是有歧义的,num既可以表示引用全局变量,也可以是创建一个新的局部变量。
在Python中,默认创建局部变量并使用它,除非显式声明global。
(2)函数内部使用全局变量
此时num2引用的是全局变量中的num2。此处是明确的,因为把num2当做一个局部变量的话,会报错,只能是全局的num2,故不需要声明global。
(3)函数内部修改全局变量
在函数中,如果想使用并修改到全局变量,则需要使用到global
(4)错误使用global
在if __name__ == ‘__main__’:中使用global。
最好的直接解决这个问题的方法是把global声明从 if __name__==’__main__’: 中删除,在这里是不需要声明global的。
因为与其他语言不同,Python中的if语句不会再引入一个新的作用域(scope),任何变量分配的都是全局变量(global)。作为一个全局变量,在使用变量名之前是不允许再一次声明为全局变量。
即if __name__==’__main__’: 中的变量都是全局的,所以在main中间再一次声明global是错误的,所以系统会发出警告。
❤ thanks for watching, keep on updating...
点个赞再走吧
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44828.html
摘要:正如我们前面举的张三的例子那样,不同命名空间中的名称之间没有任何关系。作用域作用域,是一个命名空间可直接发放完的代码的文本区域。删除也是如此,语句会从局部命名空间的引用中移除对的绑定。 命名空间和作用域的概念我们之前也提到过,比如内置函数globals(),函数中变量的作用域,模块使用的import等等。这些可能让我们对这两个概念有了大致的理解。本节再详细探讨一下。 showImg(h...
摘要:真正管理这些名子的事物就是本文的主角命名空间。闭包命名空间闭包函数的名称空间引入。函数调用时产生新的局部命名空间函数返回结果抛出异常时释放命名空间,每一次递归都生成一个命名空间。标识符产生地点决定标识符所处的命名空间。 懒得扫全文的童鞋,可以直接跳到最后看总结。我们先从一个简单的栗子说起: 栗子 a 文件中有变量 va 以及类 A,b 文件导入 a 中class A ,并打印出 A: ...
摘要:项目地址闭包在计算机科学中,闭包英语,又称词法闭包或函数闭包,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。 项目地址:https://git.io/pytips 闭包(Closure) 在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是...
摘要:第一种情况打印结果为第二种打印结果为因为如果默认参数是一个可变的数据类型,那么他在内存中永远是一个。 名称空间与作用域 1.变量储存在一个内存空间中 2.当程序运行的时候代码从上到下依次执行,它会将变量与值的关系存储在一个空间中,这个空间叫名称空间,命名空间,全局名称空间 3.当程序遇到函数时,它会将函数名存在内存中,函数体漠不关心 4.当程序执行的时候,内存会临时开辟一个空间,...
摘要:关键字在中,闭包只能读外部函数的变量,而不能改写它。注意关键字是中出现的所以在中无法直接使用关键字里只有种作用域全局作用域和局部作用域。两者使用的范围不同。 关键字nonlocal 在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。为了解决这个问题,Python 3.x引入了nonlocal关键字,在闭包内用nonlocal声明变量,就可以让解释器在外层函数中查找变量名...
阅读 1454·2021-11-24 09:38
阅读 3341·2021-11-18 10:02
阅读 3182·2021-09-22 15:29
阅读 2908·2021-09-22 15:15
阅读 994·2021-09-13 10:25
阅读 1742·2021-08-17 10:13
阅读 1909·2021-08-04 11:13
阅读 1943·2019-08-30 15:54