Python 模块函数使用来自全局环境的变量

Python module functions to use variables from global env

我对 Python 比较陌生,我正在尝试做一些事情并进一步了解 Python 的工作原理。

我对 google 一无所知,部分原因是我不知道如何正确描述我正在尝试做的事情。

我的目标是从一个模块加载一个函数,它没有 take/require 个参数,但在全局环境中找到它需要的东西。

这个有效:

temp = 17

def doubletemp():
    dt = temp * 2
    return dt

doubletemp()

但是如果我将 doubletemp() 放在一个单独的文件中,称为 steve.py 并且有这个:

steve.py

def doubletemp():
    dt = temp * 2
    return dt

dt.py

import steve

temp = 17

steve.doubletemp()

当我 运行 dt.py 时,我得到一个错误:NameError: name 'temp' is not defined.

有办法解决这个问题吗? Steve.py 中的函数在 dt.py 的环境中寻找温度的方法?

谢谢!

你可以使用:

def doubletemp():
    temp = globals()["temp"]
    dt = temp * 2
    return dt

由此 globals() 将检查您当前的模块,在您的情况下 steve.py,但在我看来,这将是一个非常糟糕的做法。你为什么不把你的变量作为函数的参数,就像这样:

def doubletemp(t):
    return t * 2

**in steve.py** --> doubletemp(temp)

在 Python 中,并不真正推荐使用全局变量,并且通常被认为是不好的做法,除非您绝对必须使用它们。

对于您的情况,只需实现参数传递即可。您的第一个示例有效,因为它全部定义在一个文件中,但仍然不建议在没有参数传递的情况下执行此操作(您在第一个示例中所做的)。

改为这样做:

dt.py

    import steve
    temp = 17
    steve.doubletemp(temp)

steve.py

    def doubletemp(temperature):
        double_temp = temperature * 2
        return double_temp

如你所知,温度和温度是两个不同的变量。另外,如果你想把所有的东西都放在一个文件里,非常推荐有参数传递:

    def doubletemp(temperature):
        dt = temperature * 2
        return dt

    temp = 17
    doubletemp(temp)