【问题标题】:Python : define a constant used by several functions [duplicate]Python:定义几个函数使用的常量[重复]
【发布时间】:2020-12-17 11:59:18
【问题描述】:

在 Python 中,我想知道如何在模块中定义一个变量,该变量可以被该模块中的所有函数使用。

我知道如果我在函数外部定义一个变量,我可以通过引入global在函数中访问该变量

例如:在模块名称gas.py

R = 8.314 # univsersal gas constant

def pressure(T, V, n):
    global R
    P = n*R*T/V
    return P

def temperature(P,V,n):
    global R
    T = P*V/(R*n)
    return T

但是如你所见,我必须在每个函数中写上global R

有没有一种方法可以访问 R 而无需在每个函数中写入 global R 例如:

R = 8.314 # 通用气体常数

def pressure(T, V, n):
    P = n*R*T/V
    return P

def temperature(P,V,n):
    T = P*V/(R*n)
    return T

谢谢

【问题讨论】:

  • 抱歉打错了……现在是正确的
  • global 只需要分配给全局,而不是读取它。
  • 您是否尝试运行第二个版本?它确实有效......
  • "我可以通过引入全局访问函数中的变量"不,使用global 不需要访问变量。只需在非全局范围内分配给全局变量您的示例已经可以做到这一点。你试过了吗?
  • 我在控制台Python上试过,不在模块内部,只是为了测试。它没有用,所以我有点惊慌,以为只有全局有效。但是现在在控制台中再次查看我的脚本后,我认为我写错了

标签: python constants global


【解决方案1】:

在python中,你可以读取全局变量的值而不用声明它global
当您想要更改全局变量的值时,您只需要 global 声明。因此,在您的情况下,您可以删除所有 global 声明。

【讨论】:

    【解决方案2】:

    不,在 Python 中,全局变量的工作方式与其他编程语言不同。

    如果你想访问一个包含在函数之外的变量,你可以像普通变量一样调用它,例如:

    word = "hello"
    
    def function():
        print(word)
    
    function()
    

    输出hello

    如果要在本地而不是全局编辑变量,则必须在函数内部重新分配变量,例如:

    word = "hello"
    
    def function():
        word = "world"
        print(word)
    
    print(word)
    

    输出hello,因为我们只在函数内部重新赋值了变量,所以变量word的全局值还是hello p>

    但是,如果我们想在非全局作用域(局部作用域)中编辑一个全局变量(例如案例 1),并且我们想在函数内部操作该变量的值,我们必须使用 @ 987654327@声明,例如:

    word = "hello"
    
    def function():
        global word 
        word = "world"
        
    function()
    print(word)
    

    现在输出将是world

    【讨论】:

    • 不对,python有全局变量。
    • @RoyCohen mmm 不是“真正的”全局变量,Python 全局变量对于 模块 是全局的。如果模块中有全局变量,则无法在另一个模块中访问它。现在,您可以“作弊”并使用__builtins__ 命名空间来模拟“真正的”全局变量,但这就是hacky
    • 无论如何,我认为这不是 OP 所要求的......
    • 你可以通过简单的module_name.global_variable_name从另一个模块访问一个模块的全局变量,例如math.pi
    • 抱歉,我知道我的回答并不完全清楚。无论如何,OP只是问了一个简单的问题,我给了他一个简单的答案。
    猜你喜欢
    • 2016-05-16
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多