代码之家  ›  专栏  ›  技术社区  ›  Dakota dmg

Python-Assign全局变量到函数return要求函数是全局的?

  •  1
  • Dakota dmg  · 技术社区  · 16 年前

    from <module> import *
    

    在我的模块中,有一些函数,其目的是在主程序中设置全局变量。

    主.py:

    from functions import *
    
    bar = 20
    print bar
    changeBar()
    print bar
    

    def changeBarHelper(variable):
        variable = variable * 2
        return variable
    
    def changeBar():
        global bar
        bar = changeBarHelper(bar)
    

    Traceback (most recent call last):
      File "/path/main.py", line 5, in 
            changeBar()
      File "/path/functions.py", line 7, in changeBar
        bar = changeBarHelper(bar)
    NameError: global name 'bar' is not defined
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   Jerub    16 年前

    做一个 import *

    from mymodule import foo, bar, baz, arr, tee, eff, emm
    

    所以它们都只是分配给模块的全局范围内的名称 import global 方法 模块全局 ,不是所有模块的全局。所以每个模块都有自己的 fubar 全局变量,分配给一个不会分配给每个模块。

    如果要从另一个模块访问名称,则必须导入该名称。所以在这个例子中:

    def foo(var1, var2):
        global bar
        from mainmodule import fubar
        bar = fubar(var1)
    

    通过在函数本身内部进行导入,可以避免循环导入。

        2
  •  0
  •   Ethan Furman    14 年前

    嗯,我不能评论这里的任何帖子,这个解决方案不起作用。我想澄清一下。

    这里有两个模块:

    主.py:

    from functions import *
    
    bar = 20
    print bar
    changeBar()
    print bar

    函数.py:

    def changeBarHelper(variable):
        variable = variable * 2
        return variable
    
    def changeBar():
        global bar
        bar = changeBarHelper(bar)

    Traceback (most recent call last):
      File "/path/main.py", line 5, in 
        changeBar()
      File "/path/functions.py", line 7, in changeBar
        bar = changeBarHelper(bar)
    NameError: global name 'bar' is not defined

    现在,给出的解决方案对我不起作用,这是一个我非常想要解决的问题。

        3
  •  0
  •   Jorel    13 年前

    def changeBar()

    需要:

    def changeBar(巴)

    functions.py处理main.py中的bar变量

    所以。。。

    from functions import *
    
    bar = 20
    print bar
    bar = changeBar(bar)
    print bar
    
    def changeBarHelper(variable):
        variable = variable * 2
        return variable
    
    def changeBar(bar):
        bar = changeBarHelper(bar)
        return bar
    
    推荐文章