gpt4 book ai didi

python - 如何动态共享包范围的配置变量?

转载 作者:行者123 更新时间:2023-12-04 07:16:51 25 4
gpt4 key购买 nike

我正在构建一个 python 包,它有一个名为“config”的模块,我在其中定义了不同的文件,其中包含一些在其他模块中用作配置的全局变量。

.
└── mypackage
├── base.py
├── config
│   ├── completion.py
│   ├── __init__.py
│   ├── locals.py
│   └── queries.py
├── encoders.py
├── exceptions.py
├── functions
│   ├── actions.py
│   ├── dummy.py
│   ├── __init__.py
│   ├── parsers.py
│   └── seekers.py
├── __init__.py
├── query.py
└── utils
├── dict.py
├── __init__.py
└── retry.py
例如,文件 mypackage/config/queries.py有以下内容:
INCLUDE_PARENTS = False
而在主文件 mypackage/base.py ,我有一个函数将此配置变量作为默认参数:
import mypackage.config.queries as conf

def query(include_parent_=conf.INCLUDE_PARENTS, **kwargs):
# do stuff depending on include_parent_ argument
我想要的,以及我在其他类似问题中找不到的,是能够在 Python/Ipython 控制台 session 中动态修改这些变量。也就是说,我应该能够在 Ipython 上执行以下操作:
In [1]: import mypackage as mp

In [2]: mp.config.INCLUDE_PARENTS = True # Its default value was False

In [3]: mp.query()
Out[3]: # result with include_parent_ argument set to True

In [4]: mp.config.INCLUDE_PARENTS = False # Now I set the value back to False

In [5]: mp.query()
Out[5]: # result with include_parent_ argument set to False
但我不明白为什么我无法实现它。我尝试在 中导入配置变量初始化 .py 及其关联的命名空间,但我从来没有设法像 Pandas 那样动态地更改全局配置变量。

最佳答案

问题是您正在使用 conf.INCLUDE_PARENTS作为函数的默认参数。创建函数时评估默认参数不是当它被称为 .因此,当您稍后更改代码时,函数内部的值不会改变。以下应该按您的预期工作。

def query(include_parent_=None, **kwargs):
if include_parent_ is None:
include_parent_ = conf.INCLUDE_PARENTS
# do stuff depending on include_parent_ argument

关于python - 如何动态共享包范围的配置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68714797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com