gpt4 book ai didi

Python:设置属于导入模块命名空间的变量

转载 作者:行者123 更新时间:2023-11-28 22:48:43 24 4
gpt4 key购买 nike

假设我有一个模块 params.py,其中声明了一堆变量:

a = 0.2
b = 0.4
...

在使用这个模块时,我想用 * 导入它的命名空间以便于引用。但在那种情况下,我似乎只能访问参数的值但不能重置它们:

from params import *
def test1():
print(a) #this works: printing out the value of params.a

def test2():
a= 0.5 #doesn't work: does not change the value of params.a

尝试将变量引用为 params.a = 0.5 也不起作用(给出一个 NameError,因为“params”未定义)

我的问题:如何设置/重置以这种方式导入的变量的值?

最佳答案

test2() 范围内分配 a = 0.5 仅适用于该函数。

您要做的是在模块上设置属性。

示例:

import params

def test1():
print(params.a)

def test2():
params.a = 0.5

参见:Short Description of Python's Scoping Rules

注意:认识到 Python 中的几乎所有事物都是某种对象并且通常具有属性可能会有所帮助。这包括模块、类、类的实例、函数等。

更新:虽然不鼓励这样做,但这将“完全”按照您的意图进行:

foo.py:

from params import *  # noqa


def test1():
print(a)


def test2():
global a

a = 0.5

参数.py:

a = 1

演示:

$ python -i foo.py
>>> test1()
1
>>> test2()
>>> test1()
0.5
>>>

更新 II: 但我还指出,正如我的评论中所述,这实际上并没有改变 params.a 引用。见:

$ python -i foo.py
>>> id(params.a)
140602494749016
>>> id(a)
140602494749016
>>> test1()
1
>>> test2()
>>> test1()
0.5
>>> id(params.a)
140602494749016
>>> id(a)
140602494760472
>>>

总结:请一般使用此处提供的第一个选项。

关于Python:设置属于导入模块命名空间的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794902/

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