【问题标题】:How to avoid global variables in this case? [duplicate]在这种情况下如何避免全局变量? [复制]
【发布时间】:2018-04-15 00:33:10
【问题描述】:

我有这个简单的代码,我希望 'a' 的值最后为 4。 'global a' 可以解决,但有没有其他办法呢?由于到处都是过度使用全局变量是设计不佳的症状。

a=3
def function():
    a = 4

function()
print(a)

【问题讨论】:

  • 一写a=3,就已经使用了全局变量。
  • 题目问“如何避免全局变量”,题目问“如何在没有global关键字的函数内部修改全局变量”。您应该解释您要解决的问题是什么。
  • 很难说写出这样的“正确”方式,因为如果我们尝试修复没有意义的东西,它很快就会简化为print(4)
  • 为什么要避免使用global 关键字?您要解决的根本问题是什么?
  • 知道你的目标很重要。 tkinter 具有称为“变量”的特殊类(请参阅The Variable Classes (BooleanVar, DoubleVar, IntVar StringVar)),它使您想做的事情变得容易并避免使用全局变量。另请参阅Control variables: the values behind the widgets 了解更多详情。

标签: python global


【解决方案1】:

如果您希望 a 为 4,则必须将其从函数中返回,然后将其重新分配给 a。

a=3
def function(b):
    b = 4
    return b

a = function(a)
print(a)

函数内部的任何名称都是该函数的本地名称,因此您可以在函数内部执行计算,而与其余代码无关。

完成后,您可以重新分配回变量以进行进一步处理。

所以也许不只是把它变成 4,你可以这样做:

a=3
def function(b):
    b = b ** 4 // 5
    return b

a = function(a)
print(a)

【讨论】:

  • 反对票有什么解释吗?
  • 可能是因为这段代码没有多大意义。
  • @Gabriel 在什么方面没有意义?
  • 在您编辑之前没有意义(不是反对者)
  • 我知道您的程序是一个有效的 Python 程序,但它具有误导性。不管怎样,你的修改改进了它。
【解决方案2】:

想出了一个解决方案,将变量存储在一个类中:

class aa:
     def __init__(self):
          self.a=3

variables = aa()

print(variables .a)  # Prints '3'

def function():
    z.a = 4

function()

print(variables .a)  # Prints '4'

【讨论】:

  • 这是一个技巧,而不是解决方案。
  • 你不需要定义一个类来做这样的事情。请参阅question 这已被标记为重复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
相关资源
最近更新 更多