Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在两个不同的函数中使用相同的变量_Python - Fatal编程技术网

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不会将它们设置为全局的。这是可能的,但不推荐。