代码之家  ›  专栏  ›  技术社区  ›  beginnersluke

Python模块函数使用全局env中的变量

  •  0
  • beginnersluke  · 技术社区  · 2 年前

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

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

    我的目标是从一个模块加载一个函数,该模块不接受/需要参数,但可以在全局环境中找到它所需要的。

    这项工作:

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

    但如果我将doubletemp()放在一个单独的文件中,名为steve。py并具有以下特性:

    史蒂夫。py公司

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

    dt。py公司

    import steve
    
    temp = 17
    
    steve.doubletemp()
    

    当我运行dt时。py,我收到一个错误:NameError:未定义名称“temp”。

    有办法解决这个问题吗?Steve中函数的一种方式。py查找dt内的温度。py的环境?

    谢谢

    2 回复  |  直到 2 年前
        1
  •  0
  •   Some Intern Coder    2 年前

    在Python中,不建议使用全局变量,除非您必须使用它们,否则大多数情况下都被认为是不好的做法。

    在您的情况下,只需实现参数传递。您的第一个示例是可行的,因为它都是在一个文件中定义的,但仍然不建议在不传递参数的情况下进行(您在第一个示例中所做的)。

    改为这样做:

    dt。py公司

        import steve
        temp = 17
        steve.doubletemp(temp)
    

    史蒂夫。py公司

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

    正如你所知,温度和温度是两个不同的变量。此外,如果您希望将所有内容都放在一个文件中,则非常建议使用参数传递:

        def doubletemp(temperature):
            dt = temperature * 2
            return dt
    
        temp = 17
        doubletemp(temp)
    
        2
  •  0
  •   baskettaz    2 年前

    您可以使用:

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

    globals()将检查当前模块,以steve为例。是的,但我认为这是一个非常糟糕的做法。为什么不在函数中把变量作为参数,如下所示:

    def doubletemp(t):
        return t * 2
    
    **in steve.py** --> doubletemp(temp)