【问题标题】:Overwriting global variable in python在python中覆盖全局变量
【发布时间】:2020-03-04 12:03:02
【问题描述】:

我有 python 文件,其中定义了一系列函数(示例如下:file1.py)。这个文件中有很多全局变量。其中一些全局变量通过 file1.py 中的不同函数传递。

我一般将file1.py导入不同的文件并使用该功能(如示例file2.py所示)。但是,对于一个特定的应用程序,我想在使用 file1.py 时覆盖 file1.py 中声明的变量密码。有没有办法做同样的事情? (我尝试了我在 file2.py 中显示的内容)我无法在 file1.py 末尾进行任何更改,因为它属于不同的开发人员..

file1.py
HOST = "https://host_for_data_api/"
PASSWORD = "DKB"
Global_2 = 2
Global_3 = 3

def func1():
    auth()

def f(auth):
    print("does authentication")

def func3(pass=PASSWORD):
    print(pass)

file2.py
import file1 as f
f.PASSWORD = "ABC"

编辑:我想看看如果我调用 func3 它应该打印“ABC”

【问题讨论】:

  • 请告诉我们您想要达到的目标。您发布的代码应该可以工作。
  • 请检查编辑

标签: python


【解决方案1】:

你的意思是这样的吗? 您可以在 func 中重新声明/重置变量,例如如果文件是 file1 或您需要的任何条件。

GLOB_VAR = "Some string"

def some_fun():
    global GLOB_VAR
    GLOB_VAR = "Some other string"

some_fun()
print GLOB_VAR

【讨论】:

  • 重置 func3 中的全局变量,就像我在上面的代码中显示的那样。只需写 global PASSWORD = 'ABC'
【解决方案2】:

你不能在函数声明之后更改参数的默认值(至少这并不容易),因为str 是不可变的。您可以将file1.func3 更改为:

def func3(passw=None):
    if passw is None:
       passw = PASSWORD
    print(passw)

或用 lambda 包装原始 func3:

orig_func3 = f.func3
f.func3 = lambda passw="ABC": return orig_func3(passw)

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多