记录平时学习中遇到相关类问题
全局变量
实例:
count = 0
def Fuc(count):
print count
count += 1
for i in range(0, 10):
Fuc(count)
上面结果:0 0 0 0 0 0 0 0 0 0 (每个0为一行)
解决:利用全局变量
global a
a = 3
def Fuc():
global a
print a
a = a + 1
if __name__ == "__main__":
global a
for i in range(10):
Fuc()print 'hello'
print a
输出: 3 4 5 6 7 8 9 10 11 12 hello 13
参考博客:全局变量详解
全局变量降低了模块和函数之间的通用性;所以,在以后的编程过程中,应尽量避免使用全局变量。
使用
在声明全局变量的时候,都喜欢把全局变量的名称定义为大写.我们应尽量不用全局变量,比如当一个模块中的两个函数要用同一个变量时,我们可以尝试把这两个函数写在一个类中,而该变量定义
成类变量。如果非要用全局变量,建议把它们全部定义在一个类中,通过“类名.类变量名”来使用它们,这样OK了,根本不用什么globle
* 法1
为了便于代码管理,将全局变量统一放到一个模块中,然后在使用全局变量的时候,导入全局变量模块,通过这种方法来进行使用全局变量
#global.py
GLOBAL_1 = 1
GLOBAL_2 = 2
GLOBAL_3 = 'Hello World'
使用:一个模块中导入全局变量定义模块,在新模块中使用全局变量
import globalValues
def printGlobal():
print(globalValues.GLOBAL_1)
print(globalValues.GLOBAL_3)
globalValues.GLOBAL_2 += 1 # modify values
if __name__ == '__main__':
printGlobal()
print(globalValues.GLOBAL_2)
- 法2
直接在模块中定义全局变量,然后在函数中直接使用就ok了。但是在使用全局变量的时候,必须在函数中使用global关键字进行标识
CONSTANT = 0
def modifyGlobal():
global CONSTANT
print(CONSTANT)
CONSTANT += 1
if __name__ == '__main__':
modifyGlobal()
print(CONSTANT)
- 法3
使用列表实现功能
a = [3]
def Fuc():
print a[0]
a[0] = a[0] + 1
if __name__ == "__main__":
global a
for i in range(10):
Fuc()
print 'hello'
print a[0]
类里面全局变量
class Test:
def __init__(self, name='testA'):
self.x = 'age'
self.name = name
self.ex() # 加上这个
# self.start()
def ex(self):
global oo
oo = 'this is test'
def start(self):
print oo
t = Test()
t.start()
或者直接使用self.oo
class Test:
def __init__(self,name='testA'):
self.x = 'age'
self.name = name
self.ex()
self.start()
def ex(self):
self.oo = 'this is test'
def start(self):
print self.oo
t=Test()