python - 访问 if __name__ == "main"中的变量

标签 python variables program-entry-point

我有一个程序可以在一系列测试中比较两个类。

主程序(称为initial.py)将两个值分配给字典

import testcheck

values = {}
valueChange = False

if __name__ == "__main__":
    values['valueOne'] = testcheck.assignValue()       #see note 1
    values['valueTwo'] = testcheck.assignValueTwo()    
    testcheck.checkValues()                            #see note 2

    while valueChange is True :
        values['valueTwo'] =   testcheck.assignValueTwo()
        testcheck.checkValues()

注1:这两个返回相同的类,但具有不同的值

注2:比较两个类。经过一系列测试,valueChange被设置为True,并且使用此代码删除一个值

import initial

...

if initial.valueChange is True:
   del initial.values['valueTwo']

...

这会返回错误

del initial.values['valueTwo']
KeyError: 'valueTwo'

我认为这是因为添加 valueOne 和 valueTwo 会将其添加到本地范围中,但即使使用全局值也无法修复它。我该如何解决这个问题?

最佳答案

这似乎是一个设计问题。您似乎正在设置循环导入,如果可能的话应该避免这种情况。如果您想要在包的模块之间共享全局状态,您可能希望将状态存储在 testcheck 模块中,而不是存储在 的全局变量中初始.py

testcheck.py

# module globals
_TEST_VALUES = {}
valueChanged = False

...

def getTestValue(name):
    return _TEST_VALUES.get('name', None)

def assignValue():
    # do stuff
    result = 'foo'
    _TEST_VALUES['valueOne'] = result
    return result

def assignValueTwo():
    # do stuff
    result = 'bar'
    _TEST_VALUES['valueOne'] = result
    return result

...

初始.py

testcheck.assignValue()     
testcheck.assignValueTwo()    
testcheck.checkValues()                          

while testcheck.valueChange:
    testcheck.assignValueTwo()
    testcheck.checkValues()

otherModule.py

import testcheck

...

if testcheck.valueChange:
    try:
        del initial.values['valueTwo']
    except KeyError:
        pass

...

我不知道这整件事的实际使用情况如何。但也许这会让您知道从哪里开始寻找。不再循环导入其他模块来导入 intial.py 入口点。您将所有全局变量存储在 testcheck 模块中。这个例子非常快速而且肮脏。只是为了说明。

任何模块都不应尝试访问另一个处理 if __name__ == "__main__" block 中数据的模块的数据。因为现在您假设它将始终用作入口点(永远不会被其他东西导入),并且您开始对代码施加限制。

关于python - 访问 if __name__ == "main"中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10475271/

相关文章:

python - 如何在 linux 中为 python 3 安装模块 "qpoases"? (二次规划包)

C 中指针变量的冲突类型(错误)

variables - 如何使用 powershell 获取注册表项的值并且仅获取该值

java - 在抽象类中有 main 方法

c - 在 C 或无限 sleep 中挂起主线程

python - pip 安装 M2Crypto 失败

python - 使 Django 聊天机器人应用程序与多个用户交互

java - java中一个变量是否可以有多个潜在值

java - 运行使用 Gradle 构建的 JAR 文件时“没有主要 list 属性”

python - 将python脚本放入系统托盘(Windows)的最简单方法是什么