不明白变量如何在__init__.py中起作用

时间:2017-12-22 11:09:34

标签: python package global-variables

首先,我在__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中的这个包方法:

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?或者,如果我在crud方法和edit.py文件中打印dbname,它们会打印不同的值。

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

1 个答案:

答案 0 :(得分:0)

虽然我不能理解你,因为你的解释真的令人困惑。我猜你是以这种方式打印dbname

# edit.py
from xxx import dbname

print(dbname)
crud(another_value)
print(dbname)

然后你会发现你得到了相同的价值观。这是因为当您from xxx import dbname时,您会获得原始dbname的本地副本。要获得原始dbname,您需要使用sys.modules["xxx"].dbname