导入的变量未定义

时间:2016-12-08 00:53:03

标签: python function python-3.x import undefined

我正在编写一个从其他程序导入函数的简单程序。它基本上将华氏温度转换为摄氏温度,反之亦然,具体取决于您给出的输入类型。这是主程序的代码:

temp = int(input('What is the temperature? '))
print('Is this temperature in fahrenheit or celsius?')
system = int(input('Please put 1 for Fahrenheit and 2 for Celsius: '))
if system == 1:
    from tempconvert import celsius
elif system == 2:
    from tempconvert import fahrenheit
else:
    print('I dont understand.')

以下是导入函数的程序代码:

def fahrenheit():
    fahrenheit = temp * 1.8 + 32
def celsius():
    celcius = temp - 32
    celsius = celcius / 1.8

当我去做的时候,它会接受我输入的温度,并且它会接受华氏温度和摄氏温度之间的区别。但是,它会说导入函数中的temp未定义。但我认为它将由主程序定义。所以关于如何解决这个问题的任何建议都是值得欢迎的,因为我被困了。

2 个答案:

答案 0 :(得分:1)

首先,您需要确保您的函数采用参数,在本例中为temp。您还希望函数返回主代码块的值

def fahrenheit(temp): 
    fahrenheitTemp = temp * 1.8 + 32
    return fahrenheitTemp

def celsius(temp):
    celciusTemp = temp - 32
    celciusTemp = celciusTemp / 1.8
    return celciusTemp

接下来,您需要修改主代码块。现在您正在从其他模块正确导入该功能,但您还没有使用它。要使用您的函数,请使用您在另一个模块中def关键字后指定的名称,并在()结尾处添加()

让我们尝试接收当前的温度并将其传递给您的函数,然后返回并打印转换后的温度。这是:

temp = int(input('What is the temperature? '))
print('Is this temperature in fahrenheit or celsius?')
system = int(input('Please put 1 for Fahrenheit and 2 for Celsius: '))

if system == 1:
    from tempconvert import celsius
    print(celsius(temp))      

elif system == 2:
    from tempconvert import fahrenheit
    print(fahrenheit(temp))

else:
    print('If at first you don't succeed... try try again!')

答案 1 :(得分:0)

是的,函数中定义的名称将查看模块的全局变量它们在中定义,不是它们导入的模块。
所有函数对象都有一个名为__globals__隐藏属性,该属性保留对包含定义模块中可用名称的字典的引用。

您需要使用适当的参数temp定义函数,并在调用时将其传递。

def fahrenheit(temp):
    fahrenheit = temp * 1.8 + 32

def celsius(temp):
    celcius = temp - 32
    celsius = celcius / 1.8

这也有一个很好的副作用,temp,作为函数的本地名称,加载速度更快:-)