1、前沿
相信同学们一定懵逼过,那是,不懵逼就不正常了,现在由我为了大家在轻松的氛围下逐个说明 标题中所述的 【名词】
2、定义
a、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。
b、局部变量:在函数内、在class的方法(构造、类方法、静态方法、实例方法)内(变量未加self修饰),这就是局部变量
c、 静态变量(类变量):在class内的,但不在class的方法内的,这就是静态变量
d、 实例变量:在class的方法内的,用self修饰的变量,这就是实例变量
3、看完定义,同学们又懵逼一次了……………………我裤裆扯了…………好,下面写一个代码的例子(基于python版本2.7.11)
a、【全局变量】与【局部变量】
关于global:对于Python2.x而言,对于一个全局变量,你的函数里如果只使用到了它的值,而没有对其赋值(指a = XXX这种写法)的话,就不需要声明global,相反,如果你对其赋值的话,那么你就需要声明global,因为声明了global的话,就表示你是在向一个全局变量赋值,而不是在新建一个局部变量并给它赋值。
全局变量与局部变量同名:如果局部变量与全局变量同名,那么方法或者函数中将优先使用的是局部变量,而不是使用全局变量(命名空间的知识点)
<———-注意——>下方的例子仅仅是作为展示用的,在实际工作中:变量名、函数名一定要有实际意义
#coding:utf-8
ahead = 'HelloWorld' #ahead是全局变量
showList = [] #showList也是全局变量
def printAhead():
print ahead #因为在该函数中没有叫ahead的局部变量,所以这里实际就是调用了全局变量ahead
def printOther():
city = 'beijing' #city是局部变量
print city + ahead #局部变量 与 全局变量
def printList():
global showList #global代表引用全局变量
showList.append(1)
showList.append(2)
print showList
printAhead()
printOther()
printList()
输出结果:
HelloWorld
beijingHelloWorld
[1, 2]
………………………………………………………人肉分割线…………………………………………………………
b、静态变量(类变量)与实例变量, 我捎带又在class的方法中展示了局部变量,哈哈
class Person(object):
TAG = "Person" #静态变量,类变量
def __init__(self, name): #self代表当前的实例对象(简单的说一下,其实都是引用哈)
print Person.TAG #这里调用了类变量
self.personName = name #personName是实例变量 (简单说就是因为self修饰在前,哈哈)
def printName(self):
group = "BeiJing_" #group是局部变量
print group + self.personName # 局部变量 与 实例变量
if __name__ == "__main__":
p = Person("WangYuanWai")
p.printName()
输出结果:
Person
BeiJing_WangYuanWai
4、再谈同名问题(大哥,命名规范点,虽然不会有这样的事,但是你要知道同名的后果,因为不是你一个人在在代码
a、如果全局变量与局部变量同名,如果你在没有引用global,那么方法中将优先使用局部变量,而不是使用全局变量
firstValue = "Hello World"
def printStr():
firstValue = "hi man"
print firstValue #注意:这里的firstValue其实调用的是局部变量firstValue,在方法中直接覆盖掉全局变量