我是Python的新手。尚未学过的课程。使用Python 3.2.2。尝试实现一些程序C逻辑。我的代码分布在2个文件中,如下所示。
dd,mm,yy=0,0,0
def isValidDate(d,m,y):
if(d>=1 and d<=31 and m>=1 and m<=12):
dd,mm,yy=d,m,y #problem
print(dd,mm,yy) #problem
print(d,m,y) #problem
return True
else:
return False
def printDate():
print(dd,mm,yy) #problem
import date
def main():
dd,mm,yy = 23,1,1984
valid = date.isValidDate(dd,mm,yy) #problem
print (valid)
date.printDate()
date.dd=22 #problem
date.printDate()
if __name__ == '__main__':
main()
我评论为“问题”的行给了我一些问题。
当module1.py
中的语句("date.dd=22"
)执行时,date.py
中的全局变量值将更改为22
并保持这种状态。
但是当我调用isValidDate()
函数时,即使测试条件通过,分配似乎也不是永久性的。 isValidDate()
函数中的本地打印语句显示为"dd"
分配了值,但在main()
函数中,对printDate()
的调用显示了原始值。
发生了什么事?
答案 0 :(得分:5)
要为代码中的全局变量赋值,您必须将其标记为原样,否则代码将分配给具有相同名称的本地变量(实际上会遮蔽全局变量)。
中所述在没有全局变量的情况下分配给全局变量是不可能的,尽管自由变量可以引用全局变量而不被声明为全局变量。
因此,要解决问题,你需要这样的东西:
def isValidDate(d,m,y):
if(d>=1 and d<=31 and m>=1 and m<=12):
global dd, mm, yy
dd,mm,yy=d,m,y
...
答案 1 :(得分:5)
你的date.isValidDate函数不对global
变量dd,mm,yy进行操作 - 而是对具有相同名称的(函数)局部变量进行操作。
为了让date.isValidDate更改所需变量的(模块)全局值,您必须在函数顶部将它们声明为全局 - 如下所示:
def isValidDate(d,m,y):
global dd, mm, yy
...