python:导入引用全局范围的函数

python:导入引用全局范围的函数,python,import,scope,Python,Import,Scope,我有两个文件module.py和main.py 在module.py中,我有一个函数,它使用在其范围之外定义的常量 #module.py def add(x): s = x + const return s if __name__ == '__main__': const = 2 print(add(2)) 直接运行时,它将4打印为输出 在main.py中,我有: #main.py import module as m const = 2 print(m.a

我有两个文件
module.py
main.py

module.py
中,我有一个函数,它使用在其范围之外定义的常量

#module.py
def add(x):
    s = x + const
    return s
if __name__ == '__main__':
    const = 2
    print(add(2)) 
直接运行时,它将
4
打印为输出

main.py
中,我有:

#main.py
import module as m

const = 2
print(m.add(2))
它给出错误:
name错误:未定义名称“const”


有没有办法让m.add()在
main.py
全局范围中查找
const
?我不想将
const
作为函数变量传递给
add()

不清楚您的实际用例是什么,但是如果您想在模块之间拥有一个共享变量,您需要在模块范围内定义该变量

在一个模块中声明它:

#module.py
const = 0  # declare as global of module.py
def add(x):
    s = x + const
    return s
if __name__ == '__main__':
    const = 3
    print(add(2))
…并在另一个:

#main.py
import module as m

m.const = 3  # reference module's variable 
print(m.add(2))

简短回答:不,这是不可能的。您要么将
const
设置为模块成员(例如
m.const=2
),要么将其传递给函数。您真正的用例是什么?为什么不想将值传递给函数?这就是函数的工作原理。我想把模型函数和模拟案例分开。其中一些函数使用相同的常量,我只想声明一次。但我希望有可能在模拟文件中更改它们
m.const
做了我想做的事情,请参见: