Python变量作用域

各位小伙伴,新年快乐!

今天是2018年的第一个工作日,不知道经过三天的休整和庆祝,各位的身心调整的怎么样?是否还沉浸在节日的气氛中呢?如果是,那么常老师就安利大家一个新方法,那就是提前一天,也就是节日的最后一天下午就进入工作状态,虽然这很痛苦,但是的确有助于帮助大家尽快投入工作。

好了,今天我们要和大家一同探讨的内容呢,具有一定的逻辑性,希望大家能够跟住,一步一步来。

今天我们要说的是:变量的作用域

什么是作用域呢?

作用域就是某一个事件或者物体在某种情况下产生的特定的作用或效果(画外音:能不能说人话?)

好吧,那常老师来举个例子(不举栗子了,太累)

比如你,你是谁?

这个问题问的太TM好了,好吧,你先来试图回答一下你是谁?

可能有很多答案,没错,你只要能列举出两个以上不同的合理答案,就说明你已经理解并掌握作用域的概念了

常老师来举几个例子:

1.我在我父母面前我就是儿子

2.我在我爷爷面前我就是孙子

3.我在我侄子面前我就是叔叔

4.我在我弟弟的孩子面前,我就是TA大爷!(哈哈哈吼)

5.我在老师面前我就是学生

6.我在我学生面前我就是老师

最后,我就是我(这点很重要)

OK了,不知道大家通过这个例子是否看到了一个道理,那就是,同一个人,在不同的环境,面对不同的人,他的角色是不同的

不同的角色规定了这个角色的权限,也就是作用,如果我叫我爷爷孙子,那肯定是要挨揍的。

这就是作用域的理解,那么变量的作用域,就是变量在不同环境下所表达的角色(当然是不同的)

好了,如果你理解了变量作用域的概念,那么下面那就让我们来看看,在Python中,变量的作用域有几种呢?

1.局部作用域(Local)

局部作用域是作用在一个函数、方法等内部,局部作用域作用范围最小

2.闭包(Enclosing)

闭包表示变量在本函数外的函数中的变量作用域

3.全局作用域(Global)

全局作用域一般是定义在函数体之外的,这里的变量通常对全局有效

4.内建作用域(Building-in)

内建作用域的作用就是Python语言内建的函数范围,比如我们使用一个print(),一个if()等等,都属于内建作用域的范围

那么,这四个作用域的大小范围是怎么样的呢?

一般来说,当我们使用一个变量,他将会按照以下的范围查找:

局部作用域(Local)-->闭包(Enclosing)-->全局作用域(Global)-->内建作用域(Building-in)

为什么呢?因为越是小范围的变量越精确,也就是说作用域越小的变量,使用起来将会越准确

(这与我们人类的语言使用习惯有关)

这四个作用域中,最常用的就是局部作用域、全局作用域和内建作用域,闭包在简单的程序设计中基本不常用,只有在复杂的程序设计中或者封装中才会使用。

下面,我分别对内奸作用域、局部作用域和全局作用域进行说明:

如果我们进行一个非常简单的输出变量,这里的x就是内建作用域

我们可以看到,上面的代码中有两个num,一个在函数体外,一个在函数体内,后面两个输出语句实际上都是输出num,在不同的作用域下,num的值是不同的。

值得注意的是:在Python中,只有引用了模块(Module)、类(Class)、函数(Def及Lambda)时才会引入新的作用域,使用其他模块的时候是不会引入新的作用域的,这点很重要。

学完作用域这个知识点之后,第一次接触的小伙伴可能会感觉程序设计很复杂,甚至有种不敢下手写代码的感觉,其实不然,作用域的最简单本质就是:可以让程序设计者重复使用某一个变量名在不同的地方,只要记住这一条,在写代码的时候稍加注意,就不会引起不必要的麻烦。

好了,新年第一天,希望大家元气满满的开始接受新的知识。

如有问题,可以随时给我留言,我会一一解答,谢谢!

-------------------------------------------------

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180102G08OWR00?refer=cp_1026

扫码关注云+社区