"from module import *" and modifying module's top-level vars

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • lemke_juergen@yahoo.de

    #1

    "from module import *" and modifying module's top-level vars

    Hi everyone,

    I define some vars and functions in a "support" module which gets
    called from my
    main app module. Using Python 2.5.

    I import all symbols in the support module at the top of the main
    module through:

    from support import *

    Is there a way for me to modify a top-level ("global"?) variable
    defined in module
    support from the code in the main module and still have those changes
    visible to
    code in the support module?

    Consider the following example:

    # support.py

    globvar = "old"

    def fun():
    print "fun(): globvar==" + globvar

    # main.py

    from support import *
    global globvar # had hoped this would do the trick (as it does when
    placed inside a function call)
    glob = "new"

    print "top level(): glob==" +glob

    fun() # defined inside support

    Calling main.py outputs

    top level(): glob==new
    fun(): glob==old

    How can I get the assignment to globvar performed inside module main.py
    to be
    felt by the code in support.py?

    Thanks in advance!

    Best

    Juergen Lemke

  • Diez B. Roggisch

    #2
    Re: "from module import *" and modifying module's top-level vars

    lemke_juergen@y ahoo.de schrieb:
    Hi everyone,
    >
    I define some vars and functions in a "support" module which gets
    called from my
    main app module. Using Python 2.5.
    >
    I import all symbols in the support module at the top of the main
    module through:
    >
    from support import *
    >
    Is there a way for me to modify a top-level ("global"?) variable
    defined in module
    support from the code in the main module and still have those changes
    visible to
    code in the support module?
    No. The from foo import * will create local bindings of the
    module-globals in the importing module, and there is no implicit link to
    the module's names.

    This is the main reason why the "from foo import *"-form is frowned
    upon, and you should refrain from using it.

    Use e.g.

    import support as s

    instead, to get a shorter name for referencing the support module.

    Diez

    Comment

    Working...