python - Python 中的全局变量

标签 python python-3.x global-variables

我是 Python 的新手。还没有上过课。使用 Python 3.2.2。尝试实现一些过程 C 逻辑。我的代码分布在 2 个文件中,如下所示。

这个文件叫做date.py
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

这个文件叫做module1.py
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() 显示原始值。

这是怎么回事?

最佳答案

要为代码中的全局变量赋值,您必须将其标记为全局变量,否则代码将赋值给具有相同名称的局部变量(这实际上会隐藏全局变量)。

documentation 中所述:

It would be impossible to assign to a global variable without global, although free variables may refer to globals without being declared global.

因此,要解决这个问题,您需要这样的东西:

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
        ...

关于python - Python 中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883000/

相关文章:

python - 分组 Pandas 列的高效交集

python-3.x - Python 3 更新 MySQL 数据库表

python - 如何在 CentOS 7 上专门为 Python3 安装 pip?

ios - 在 Swift 中使用条件编译定义全局变量

Python 语法/列表切片问题 : What does this syntax mean?

python - 尝试访问 Django 页面时,在 Heroku 上部署 Django 应用程序时出现错误代码 H13

python - 让一元运算符与 Python 类一起工作

python - 不同流程之间共享值的问题

java - 如何允许访问类(class)?

objective-c - 仅 "extern const"与 "extern"