开发者学堂课程【Python入门 2020年版:全局变量和局部变量】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10330
全局变量和局部变量
全局变量和局部变量
1. a=100#这个变量是全局变量,在整个 py 文件里都可以访问,无论在哪里写,这个文件都可以访问。
Def test():
X=’hello’
#这个变量是在函数内部定义的变量,它是局部变量,只能在函数内部使用,如果在外部写一个就会报错,出了函数以后就不能使用。
Print
(’X={}’.format(x))
Print
(a)
在函数内部就可以使用,
Print
(’函数外部a={}’.format(a) 该变量是一个全局变量,在函数内部跟外部都能使用的一个变量。
Print
(x)
这个函数会报错,#x只能在函数内部使用
Print
(’函数内部a={}’.format(a))
运行结果:
函数外部 a=100 函数外部可以使用,为什么函数内部没有打印,因为没有调用,调用一下,
Test
()
Print
(x)
Print(’函数外部a={}’.format(a))
运行结果
函数外部 a=100
函数内部 a=100
这个比较简单,是最最基本的一个情况,
2. 假如现在这样写 a=10,会怎么样,在函数内部生成的变量是一个局部变量,a=100在函数外部生成的变量是一个全局变量,a=10是一个什么变量,有两个选择#
1. 在函数内部又定义了一个新的局部变量
2.修改了外部的全局变量。
Def test():
X=’hello’
Print
(’X={}’.format(x))
a=10
Print
(’函数内部a={}’.format(a))
Test
()
Print
(x)
Print(’函数外部a={}’.format(a))
运行结果:
函数内部 a=10
函数外部 a=100
所以是1.在函数内部又定义了一个新的局部变量。
#如果局部变量的名和全局变量同名,会在函数内部又定义一个新的局部变量,而不是修改全局变量
3.global 关键字的使用
word=’你好’
#函数内部如果想要修改全局变量?
Global word
Word=’OK’
Test()
Print(‘函数外部word={}’.format(word))
运行结果:
函数外部 word=ok
#使用 global 对变量进行声明,可以通过函数修改全局变量的值。
A 没有写 global,就没有写外面的,是一个新的局部变量,global 之后它就会修改外部的全局变量,只要调用了 test函数,test 函数对 word 进行修改,之后再在后面写 word,结果都是 ok,
4.#内置函数
globals()可以查看全局变量 , locals()可以查看局部变量。
print( ' locals = {},globals = {'.format(locals()
, globals()))
不调用不修改 word,调用了以后查看 word,永远都是 ok,
运行结果:
locals = ("x ' : "'hello' , ' a ': 10)},globals = {'_name_ ': '_main_', '_doc_ ': None, '_package_ ': None,'}
注意:
会打印函数里的局部变量,locals 中没有 word,对整个变量来说,test 也是一个变量,这个函数对应的值是一个函数,同名中会出错,所以起名字时要注意,写的时候将光标放到那里,shadows name’a’from outer scope,表示在外部的环境里有一个 a 变量,局部变量的名字跟全局变量的名字起的相同了。
5.#在 python 里,只有函数可以分割作用域,全局变量全局范围里都可以使用,局部变量只能在这个范围内使用。
例:
If 3>2:
m =’hi’
print
(m)
m 是一个全局变量,还是局部变量,是一个全局变量,在 if 语句中写的全局变量,在外面依然可以访问,
运行结果:
Hi
(是一个全局变量)
Print
(global是())
运行结果:’m’,’hi
虽然是全局变量,但这个写法不太正确,打印 m 就会报错,因为他认为你没有定义。’