学习Python的过程中少不了用到变量,在日常的编写程序的过程中,每时每刻都在使用变量,
问:什么是变量
答:变量是可以改变的数,通常没有固定的值
问:有几种变量
答:变量分为2种形式,即:全局变量和局部变量
名词解释:
全局变量:顾名思义全局变量,作用域在整个文件中任何地方都可以使用的变量
局部变量:顾名思义,作用域的范围没有全局变量那么大,他的作用域有可能在一个函数体内,也有可能在一个复合函数内
如何定义这两种变量
全局变量:
1 #定义一个全局变量 2 age = 12 3 4 #为了区分全局变量和局部变量,特意写一个函数 5 def test(): 6 print('在函数内打印的',age) 7 #执行函数 8 test() 9 10 print('在函数外面打印的',age)
在函数内打印的 12
在函数外面打印的 12
看上面代码运行的结果和代码,我在第2行代码定一个一个变量名为age的变量,这个变量可以理解成是全局变量,仔细看下,这个名为age的变量我既可以在test这个函数中使用,同时也可以在这个函数外使用,这也就是我上面说的作用域为整个文件的任何地方。
局部变量:
1 #为了区分全局变量和局部变量,特意写一个函数 2 def test(): 3 #定义的一个局部变量 4 age = 12 5 print('在函数内打印的',age) 6 #执行函数 7 test() 8 9 print('在函数外面打印的',age)
Traceback (most recent call last): 在函数内打印的 12 File "/Users/dark/PycharmProjects/Study/changec.py", line 17, in <module> print('在函数外面打印的',age) NameError: name 'age' is not defined
这次是定义的一个局部变量,看下执行结果显然的报了一个错误,在看下代码,这次我在test这个函数内定义了一个age,我直接打印,在看下面的运行结果正常打印,接着看下我在第9行代码打印的age,显然运行出错,并且提示“name 'age' is not defined”(名字为age没有找到),出现这个错误的原因就是我上面说的作用域的问题。
总结:在函数外面定义的变量,称之为全局变量,函数内定义的变量称之为局部变量,全局变量可以在函数内使用,但是函数内定义的局部变量不可以在函数体外使用
变量修改:
1 #定义一个全局变量 2 age =12; 3 #为了区分全局变量和局部变量,特意写一个函数 4 def test(): 5 #定义的一个局部变量 6 age = 25 7 print('在函数内打印的',age) 8 #执行函数 9 test() 10 11 print('在函数外面打印的',age)
在函数内打印的 25
在函数外面打印的 12
讲解到关闭变量修改值的问题。比如上述代码,我定义一个全局变量,我在test函数内定义一个局部变量,那么我在函数内打印的age会不会和在函数外打印的age的值是一样的呢?
这个显然不是的,看下代码和运行结果我定义的全局变量在函数外面打印的是12,而在函数内打印的是25,Why?为什么会这样。这个问题又牵扯到我刚才说的作用域的问题,如果在函数内和函数外定义一个变量名相同的变量(也就是说我定义一个全局变量和局部变量相同名字的变量),打印的时候按照什么原则打印呢?是按照的就近原则打印的。如果在函数内打印,首先会在函数内寻找有没有一个名字叫做age的变量,如果有打印,如果没有在寻找有没有全局变量的名字叫做age,变量存在,打印,不存在则报错。
再回到我刚才所说的那样变量修改,
问:那是不是我定义一个全局变量,我想在一个函数内修改是不是就不能修改呢?
答:肯定不是的,那么如何在函数内修改全局变量呢?
这个需要用到一个指定符(谁知道这玩意叫啥,我随口说的)global来指定变量是全局的,看操作如何使用
1 #定义一个全局变量 2 age =12; 3 #为了区分全局变量和局部变量,特意写一个函数 4 def test(): 5 #定义的一个局部变量 6 global age 7 age = 25 8 print('在函数内打印的',age) 9 #执行函数 10 test() 11 12 print('在函数外面打印的',age)
在函数内打印的 25
在函数外面打印的 25
Look,通过global指定age为全局值,通过第7行代码的修改变量值,经过输出,输出值都是25,这个就是在函数内修改全局变量的值。
好,全局变量和局部变量的教程到此,谢谢大家观看