Python 在两个不同的函数中使用相同的变量
我有两个职能:Python 在两个不同的函数中使用相同的变量,python,Python,我有两个职能: def read_temp(): lines1, lines2 = read_temp_raw() while lines1[0].strip()[-3:] != "YES": time.sleep(0.2) lines1, lines2 = read_temp_raw() temp1 = calculate_temp(lines1) temp2 = calculate_temp(lines2)
def read_temp():
lines1, lines2 = read_temp_raw()
while lines1[0].strip()[-3:] != "YES":
time.sleep(0.2)
lines1, lines2 = read_temp_raw()
temp1 = calculate_temp(lines1)
temp2 = calculate_temp(lines2)
return temp1, temp2
def Temp_difference():
if temp1 > temp2:
print(temp1 - temp2)
else:
print(temp2 - temp1)
我想在Temp_difference
中使用temp1
和temp2
。当我尝试在read_temp
中全局添加变量时,我的IDE(Pycharm)说:“全局变量'temp1/2'在模块级别上未定义”。我试着这样做:
def Temp_difference(temp1, temp2):
print (abs(temp1-temp2))
我没有收到任何警告或错误,但我不知道这是否正确。那么有没有更好/正确的方法来实现这一点呢?正如您所拥有的,您的变量是给定函数的局部变量。您可以在其他函数中使用全局变量,方法是在为其赋值的每个函数中将其声明为
global
:在Temp\u difference()
函数中,您可以调用read\u Temp()
函数。然后可以将返回的值保存为temp1
和temp2
变量。代码如下:
def Temp_difference():
temp1, temp2 = read_temp()
if temp1 > temp2:
print(temp1 - temp2)
else:
print(temp2 - temp1)
这回答了你的问题吗?作为旁注,实际上不需要
if/else
。你可以这样做:print(abs(temp1-temp2))
我不确定@Tomerikoo。谢谢你的旁注。我已编辑了我的问题。若要获得有用的答案,请发布一篇文章。在这种情况下,我们看不到如何调用这些函数,只看到它们的定义,所以很难帮助我,我还没有到那个地步。这是一个项目的一部分,涉及带有树莓皮的温度传感器。我还没有机会测试它,但我正在考虑使用Temp\u difference()
。这是关于漏水检测的。这里没有真正的理由使用global
。请注意,read\u temp
已返回值。所缺少的就是将它们传递给Temp_difference
,我同意,但是如果他保持变量名不变,则更容易理解。它还消除了传递这些变量的需要。全局变量通常不受欢迎,因为它们会影响模块运行时的行为。它还消除了传递这些变量的需要-但增加了使它们成为全局变量的需要,以及所有其他含义。那么收益是什么呢?您仍然可以保持名称完全相同,因为它们是本地的…@Techguy不会将它们设置为全局的。这是可能的,但不推荐。