我有三个想要更改全局变量但不能组合成一个函数的函数,我现在知道的方法是在每个函数中保持定义“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>
谢谢
答案 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