【问题标题】:Changing variable on another module for functions在另一个模块上更改函数的变量
【发布时间】:2017-01-03 23:59:32
【问题描述】:

我做了两个py文件,其中ma​​in.py包含:

import module

module.Print("This should not appear.")

module.Silence = False
module.Print("This should appear.")

导入的模块是module.py,其中包含:

Silence = True


def Print(Input, Sil= Silence):
    if Sil == False:
        print(Input)

预期的结果应该是:

这应该会出现

结果:

【问题讨论】:

  • 您没有将第二个参数传递给您的 Print 方法。因此它始终采用您定义为False 的默认参数。当您调用 Print 时,只需传递您的第二个参数:module.Print('stuff', module.Silence)

标签: python python-3.x variables import


【解决方案1】:

问题是您已经使用默认参数 True 定义了 Print 函数(因为在导入此模块并创建函数时 Silent == True )。稍后将模块变量 Silent 更改为 False 不会以任何方式影响此函数定义。它已经一成不变了。

您可以实现您想做的事情,例如(module.py):

Silence = [True]

def Print(Input, Sil= Silence):
    if Sil[0] == False:
        print(Input)

...

然后在main.py中设置module.Silence[0] = False

[我假设这里的目标是调用函数而不传入显式的Sil 参数。您当然可以只传入一个显式的第二个参数,然后让函数完全按照您的预期执行]

【讨论】:

    【解决方案2】:

    我认为您正在寻找具有可以动态更改的默认设置的功能。只有在 Print() 函数调用中省略了 sil 参数时,这才会使用全局 Silence

    def Print(input, sil=None):
        if sil is None:
            sil = Silence
        if not sil:
            print(input)
    

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      相关资源
      最近更新 更多