目录
1.问题描述
环境描述:使用的Python版本python3.7
python 执行会提示变量execF 和ncount 没有定义就使用,这和Python变量作用域有关系。
代码如下:
#-*-coding:utf-8 -*-
__author__ = 'Administrator'
#此处是每天判断时间是否是新的一天然后执行任务
execF = False
ncount = 0
def timerTask():
nLocalVar = 1 #函数局部变量
if execF is False:# 变量execF 会提示没有定义就使用
execF = True # 变量execF 没有定义就使用
ncount = ncount+1# 变量ncount 没有定义就使用
print("定时器执行%d次"%(ncount))
if __name__=="__main__":
#定时器5秒之后执行
timer = threading.Timer(5,timerTask)
timer.start()
2.解决方法
修改代码如下
#-*-coding:utf-8 -*-
__author__ = 'Administrator'
#此处是每天判断时间是否是新的一天然后执行任务
execF = False
ncount = 0
def timerTask():
global execF#声明变量使用全局作用域的变量
global ncount#声明变量使用全局作用域的变量
nLocalVar = 1 #函数局部变量
if execF is False:
execF = True
ncount = ncount+1
print("定时器执行%d次"%(ncount))
if __name__=="__main__":
#定时器5秒之后执行
timer = threading.Timer(5,timerTask)
timer.start()
声明在函数内部使用的局部变量使用的全局作用域声明的变量
3.Python 变量说明
在一开始声明的变量execF、ncount 变量都是全局变量,作用域是此代码所有的地方,但是在函数内部的时候使用的时候,特别是修改全局变量的值时,都需要用关键字 global 声明下告诉此处需要使用全局变量execF、ncount。
函数内部声明的变量,之后在函数内部作用,外部不可以使用。nLocalVar 变量就是函数局部变量,只在函数timerTask()中起作用。其他代码处不可以使用。