代码之家  ›  专栏  ›  技术社区  ›  TomSawyer

不理解变量在\uu init\uuuuu中是如何工作的。py公司

  •  0
  • TomSawyer  · 技术社区  · 7 年前

    首先,我有一个变量和函数 __init__.py 文件:

    dbname = 'dbname'
    def crud(_dbname):
        global dbname
        dbname = _dbname
        print(dbname) # the value here is correct
    
        from . import edit
        edit.render()
    

    内部 edit.py print(dbname)

    from . import *
    
    def render():
        print(dbname) # wrong value
    

    然后,我从其他文件在每个url中调用此package方法:

    from .crud import crud
    @admin.route('/user/', methods=['GET', 'POST'])
    @login_required
    def adminuser():
       crud('user')
    
    from .crud import crud
    @admin.route('/group/', methods=['GET', 'POST'])
    @login_required
    def admingroup():
       crud('group')
    

    它总是打印 user ? 或者如果我在里面打印dbname crud 方法和 编辑py公司 文件,它们打印不同的值。

    dbname 已在crud中更新,但无法在edit中看到新值。py文件。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Sraw    7 年前

    虽然我不能很好地理解你的解释,但你的解释确实令人困惑。我猜你在打印 dbname 以这种方式:

    # edit.py
    from xxx import dbname
    
    print(dbname)
    crud(another_value)
    print(dbname)
    

    然后你会发现你得到了相同的值。那是因为当你 from xxx import dbname ,您可以获得原件的本地副本 库名 . 获取原始 库名 ,您需要使用 sys.modules["xxx"].dbname .