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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不明白变量如何在__init__.py中起作用相关的知识,希望对你有一定的参考价值。

首先,我在__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文件中看到新值。

答案

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

# edit.py
from xxx import dbname

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

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

以上是关于不明白变量如何在__init__.py中起作用的主要内容,如果未能解决你的问题,请参考以下文章

__init__.py的用法

python模块中__init__.py的作用

我可以使用 __init__.py 来定义全局变量吗?

python中 __init__.py的作用

__init__.py在导包中起到的作用

Python __init__.py 作用详解