python全局变量访问:在每个函数中保持定义?

时间:2018-04-30 10:37:37

标签: python python-2.7

我有三个想要更改全局变量但不能组合成一个函数的函数,我现在知道的方法是在每个函数中保持定义“global”关键字以便能够访问全局变量。有没有更好的方法来做同样的事情而不继续重新定义全局变量?例如:

<script>
    AWS.config.update({
      region: "us-west-2",
      endpoint: 'https://dynamodb.us-west-2.amazonaws.com',
      accessKeyId: "Fakeaccesskey",
      secretAccessKey: "Fakesecretkey"
    });

    var docClient = new AWS.DynamoDB.DocumentClient();

    function readItemkitchenbat() {
        var table = "TA_Latest_Log";
        var GWID = "BB00000001";
        var ID = "AA00000029";

        var params = {
            TableName: table,
            Key:{
                "GWID": GWID,
                "ID": ID
            },
               "ProjectionExpression": "BatV"
        };
        docClient.get(params, function(err, data) {
            if (err) {
                document.getElementById('kitchenbat').innerHTML = "Unable to read item: " + "\n" + JSON.stringify(err, undefined, 2);
            } else {
                document.getElementById('kitchenbat').innerHTML = data.Item.BatV + "V";

            }
        });
    }

</script>

谢谢

3 个答案:

答案 0 :(得分:1)

为什么不定义另一个函数,它使用作为参数提供的参数更改全局变量的值。并在你的其余功能中调用它。例如:

var=None

class A:

  def change(self,num):
     global var
     var = num

  def first(self,num):
    self.change(num)

  def second(self,num):
    self.change(num)

  def third(self,num):
    self.change(num)

a=A()

a.first(1)
print 'value of global variable',var

a.second(2)
print 'value of global variable',var

a.third(3)
print 'value of global variable',var

否则,如果你的全局变量的范围应该被限制在你的类中,那么将它声明为类的成员,并让函数改变它的值。例如:

class A:

  def __init__(self):
     self.var=None
     print "default = ",  self.var

  def first(self,num):
    self.var=num
    print "fn1 = ",  self.var

  def second(self,num):
    self.var=num
    print "fn2 = ",  self.var

  def third(self,num):
    self.var=num
    print "fn3 = ",  self.var




a=A()

a.first(1)
print 'value of variable',a.var

a.second(2)
print 'value of variable',a.var

a.third(3)
print 'value of variable',a.va

答案 1 :(得分:0)

您可以将全局变量设为可变类,然后在适当位置进行变异。

global_dict = {"data": 1}
global_list = [1]

class MutableInt:
    def __init__(self, value=1):
        self.value = value

global_int = MutableInt()

这有效,但我个人不会称之为更好。使用global,您至少可以100%清楚地更改全局变量。最好是将您的架构更改为不需要任何全局变量。

答案 2 :(得分:0)

似乎该函数是基于self关键字的类的一部分,如果是这样,他们都可以访问类变量而不需要global关键字,如果它们不是你可以上课:

使用函数的给定参数定义每个函数,并使该函数返回一个值。

 def func1(param_1):
     #work on param_1 
     return param_1