Python作用域 全局|局部|global

暗物质计算
• 阅读 2353

在使用变量的时候,有时候会发生变量引用错误,或者程序运行完,程序得到的结果与预期存在差别。

记住一条原则:任何变量在使用前,都必须确保“变量引用是否明确”!

  • 全局变量:作用域是整个脚本,除非被删除掉,否则他们存活到脚本结束,且对于所有函数,他们的值是可以被访问的。
  • 局部变量:作用域局限在定义的函数,依赖于函数现阶段是否处于活动。当函数被调用时,局部变量进入声明它们的作用域。一旦函数完成,变量将会离开其作用域。

我们来看一些例子:
(1)局部变量
函数内部的变量名如果第一次出现,且出现在“=”左边,即被视为定义一个局部变量。不管全局域中有没有用到该变量名,函数中使用的将是局部变量。

Python作用域 全局|局部|global

ps:此处会报错。因为num首先被当成了一个局部变量,到等号右侧后发现这个变量还没赋值就被用于计算,于是报错。
Num += 100:这句话是有歧义的,num既可以表示引用全局变量,也可以是创建一个新的局部变量。
Python中,默认创建局部变量并使用它,除非显式声明global

(2)函数内部使用全局变量

Python作用域 全局|局部|global

此时num2引用的是全局变量中的num2。此处是明确的,因为把num2当做一个局部变量的话,会报错,只能是全局的num2,故不需要声明global

(3)函数内部修改全局变量
在函数中,如果想使用并修改到全局变量,则需要使用到global

Python作用域 全局|局部|global

(4)错误使用global

  • if __name__ == ‘__main__’:中使用global

Python作用域 全局|局部|global

最好的直接解决这个问题的方法是把global声明从 if __name__==’__main__’: 中删除,在这里是不需要声明global的。
因为与其他语言不同,Python中的if语句不会再引入一个新的作用域(scope),任何变量分配的都是全局变量(global)。作为一个全局变量,在使用变量名之前是不允许再一次声明为全局变量。
if __name__==’__main__’: 中的变量都是全局的,所以在main中间再一次声明global是错误的,所以系统会发出警告。


❤ thanks for watching, keep on updating...
点个赞再走吧

点赞
收藏
评论区
推荐文章
Souleigh ✨ Souleigh ✨
4年前
JS - 作用域
一、作用域作用域,即变量(变量作用域又称上下文)和函数生效(能被访问)的区域或集合换句话说,作用域决定了代码区块中变量和其他资源的可见性举个例子function myFunction(){    let inVariable  "函数内部变量";}myFunction();//要先执行这个函数,否则根本不知
Dax Dax
4年前
JS核心原理理解闭包
前置概念在正式看闭包之前,我们先来学习一下前置知识,那就是JS中的作用域,我们知道,在ES5之中,作用域分为两种:全局作用域和函数作用域,随着ES6的到来,新增了块级作用域,想更好的理解闭包,那么搞清楚作用域是首要条件全局作用域我们知道,对于变量而言,我们一般会分成两类:全局变量和局部变量,一般定义在最外围环境的为全局变量,定义在函数当中的为局部变量,在we
Karen110 Karen110
4年前
一篇文章带你了解JavaScript作用域
在JavaScript中,对象和函数也是变量。在JavaScript中,作用域是你可以访问的变量、对象和函数的集合。JavaScript有函数作用域:这个作用域在函数内变化。一、本地JavaScript变量一个变量声明在JavaScript函数内部,成为函数的局部变量。局部变量有局部作用域:它们只能在函数中访问。JS://codeherecann
菜园前端 菜园前端
2年前
为你解惑JS作用域和作用域链知识
原文链接:变量作用域一个变量的作用域(scope)是程序源代码中定义这个变量的区域。全局变量拥有全局作用域,在JavaScript代码中的任何地方都是可以访问的。然而在函数内声明的变量只能在函数体内访问,它们是局部变量,作用域是局部性的。函数参数也是局部变
Jacquelyn38 Jacquelyn38
4年前
你所知道的JS变量作用域
变量的作用域,指的是变量在脚本代码中的可读、可写的有效范围,也就是脚本代码中可以使用这个变量的区域。在ES6之前,变量的作用域主要分为全局作用域、局部作用域(也称函数作用域)两种;在ES6及其之后,变量的作用域主要分为全局作用域、局部作用域、块级作用域这3种。相应作用域变量分别称为全局变量、局部变量、块级变量。全局变量声明在所有函数之外;局部变量是在函数体内
Jacquelyn38 Jacquelyn38
4年前
重学JavaScript第1集|变量提升
变量提升就好比JavaScript引擎用一个很小的代码起重机将所有var声明和function函数声明都举起到所属作用域(所谓作用域,指的是可访问变量和函数的区域)的最高处。这句话的意思是:如果在函数体外定义函数或使用var声明变量。则变量和函数的作用域会提升到整个代码的最高处,此时任何地方访问这个变量和调用这个函数都不会报错;而在函数体内定义函数或使用va
Stella981 Stella981
3年前
Javascript 变量 var与不var的区别
1.在函数作用域内加var定义的变量是局部变量,不加var定义的就成了全局变量。使用var定义var a  'hello World';function bb(){    var a  'hello Bill';    console.log(a);   }bb()   // 'hello Bill'conso
Stella981 Stella981
3年前
Python的四种作用域及调用顺序
↑关注星标 ~从此不迷路,后台回复【礼包】送你Python自学资料作用域又可以被称为命名空间,指变量起作用的范围。Python变量作用域可以分为四种,分别为局部作用域、嵌套作用域、全局作用域、内置作用域。作用域英文简写局部作用域LocalL嵌套作用域EnclosedE全局作用域Global
Wesley13 Wesley13
3年前
Java连载7
一、变量1.注意点:在同一个“作用域”中,变量名不能重名,但是变量可以重新赋值。2.什么是作用域?答:描述的是变量的有效范围,在范围之内是可以被访问的,只要出了作用域就无法访问(也就是在大括号里面才行)3.关于变量的分类(1)局部变量:在方法体中声明的变量;(2)成员变量:在方法体外声明的变量。4.在不同的作用域中,变量名是可
Wesley13 Wesley13
3年前
C语言面试题大汇总之华为面试题 Eddy整理
1、局部变量能否和全局变量重名?  答:能,局部会屏蔽全局。要用全局变量,需要使用"::";局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。2、如何引用一个
小万哥 小万哥
1年前
Python 作用域:局部作用域、全局作用域和使用 global 关键字
变量只在创建它的区域内可用。这被称为作用域。局部作用域在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。示例:在函数内部创建的变量在该函数内部可用:pythondefmyfunc():x300print(x)myfunc()函数内部的函