从其他脚本增加整数

时间:2017-01-25 11:56:13

标签: python

我试图了解如何访问和增加驻留在另一个脚本中的整数。我的层次是这样的:

- TestDirectory
-- foo.py
-- bar.py

示例:

foo.py

import TestDirectory.bar as bar
def main():
    testCounter = 0
    bar.increment()
    print(testCounter)

main()

bar.py

import TestDirectory.foo as foo
def increment():
    foo.main().testCounter += 1

我希望我的打印返回1,但它给了我一个错误:

AttributeError: module 'TestDirectory' has no attribute 'bar'

任何人都可以解释或解决我的问题吗?

3 个答案:

答案 0 :(得分:1)

虽然我无法重现您的错误(并且无关紧要),但您似乎在这里搞乱了循环导入。

在您的案例中绕过循环问题的一种简单方法如下:

  • bar.py中,修改increment函数的行为,将int作为输入参数,并在更新后返回。
  • foo.py中,更新main以发送testCounter作为参数并捕获其返回值。
  • foo.py中移除循环导入时,在bar.py中修改导入语句(取决于您的惯例)。

以下是我对此问题进行排序的简约代码更改 P.S:从TestDirectory文件夹内部运行。

<强> foo.py

import bar

def main():
    testCounter = 0
    testCounter = bar.increment(testCounter)
    print(testCounter)

main()

bar.py

def increment(testCounter):
    testCounter += 1
    return testCounter

答案 1 :(得分:0)

您的代码存在很多问题:

  1. 方法中的变量是方法的局部变量,你不能从函数外部访问它们,忘记在脚本之外(即模块)
  2. 要在同一文件夹中导入另一个模块,只需使用脚本本身的名称
  3. 由于您要从foobar bar访问foo,您最终会获得循环导入,可以使用本地导入来避免
  4. 这是解决您问题的方法,但很有可能,您可以通过设计更改而不是我提供的方式做得更好:

    foo.py

    import bar
    
    testCounter=0
    
    if __name__=="__main__":
        bar.incrementTestCounter()
        print bar.getTestCounterValue()
    

    bar.py

    def incrementTestCounter():
        import foo
        foo.testCounter=foo.testCounter+1
    
    def getTestCounterValue():
        import foo
        return foo.testCounter
    

答案 2 :(得分:0)

发布我的解决方案以帮助其他有需要的人!

Hierachy就像这样(即使它无关紧要):

- Folder1
-- bar.py
- Folder2
-- foo.py

<强>解决方案:

<强> foo.py

from Folder1 import bar
def main():
    bar.increment()
    print(bar.counter)

main()

<强> bar.py

counter = 0
def increment():
    global counter
    counter += 1