需要一些函数调用清理

时间:2016-12-15 09:27:18

标签: python function parameters execution

我目前正在为我的考试做一些评论,我有一个奇怪的问题,或者我可能正在监督一个非常简单的错误,我出于某种原因无法抓住。我正在练习在这些函数之间传递函数和参数,我制作了一个非常简单的程序,以确保我理解基础知识:

 def temperature(celsius, fahrenheit):
      celsius = 15
      fahrenheit = 59
      print("The current temperature in C is: ", celsius)
      print("The current temperature in F is: ", fahrenheit)
      return(celsius, fahrenheit)

 temperature(celsius, fahrenheit)

现在我不确定是否需要返回值,但我把它们放在那里是因为我记得我的教授说这很重要。

现在,问题是当我尝试运行它时,它告诉我在程序运行时甚至无法识别应该传递的变量。有人可以解释为什么这是问题吗?

为了将来参考,如果我想在2个或更多函数之间传递这些变量,我该怎么做?

更新:为了进一步澄清而添加以下文字

这是我教授为我提供的一些代码作为范例。他如何通过这些局部变量?

def introduction ():
    print ("""
Celsius to Fahrenheit converter
-------------------------------
This program will convert a given Celsius temperature to an equivalent
Fahrenheit value.

    """)

def display(celsius, fahrenheit):
    print("")
    print("Celsius value: ", celsius)
    print("Fahrenheit value:", fahrenheit)

def convert():
    celsius = float(input("Type in the celsius temperature: "))
    fahrenheit = celsius * (9 / 5) + 32
    display(celsius, fahrenheit)

def start():
    introduction ()
    convert ()

start()

3 个答案:

答案 0 :(得分:0)

在调用温度(摄氏度,华氏度)之前,你需要定义变量摄氏度和华氏度。

例如:

def temperature(celsius, fahrenheit):
    celsius = 15
    fahrenheit = 59
    print("The current temperature in C is: ", celsius)
    print("The current temperature in F is: ", fahrenheit)
    return(celsius, fahrenheit)

celsius = 20   
fahrenheit = 15

temperature(celsius, fahrenheit)

然后它会起作用。

答案 1 :(得分:0)

您收到错误,因为您已声明的变量范围' celsius'和' farenheit'函数temparature()的本地函数,你应该在函数之外声明它,以便它们的范围不受限制。

 def temperature(celsius, fahrenheit):
  print("The current temperature in C is: ", celsius)
  print("The current temperature in F is: ", fahrenheit)
  return(celsius, fahrenheit)

celsius = 15
fahrenheit = 59
temperature(celsius, fahrenheit)

答案 2 :(得分:0)

您在理解函数如何工作方面遇到了问题......

函数中定义的变量范围不超过函数本身。也就是说,如果你退出这个函数,这些变量(如果它们不是全局的)就不再存在了。

你应该在调用函数之前定义变量,或者将它们作为关键字参数传递给默认值给它们:

celsius = 15
fahrenheit = 59
def temperature(celsius, fahrenheit):
      print("The current temperature in C is: ", celsius)
      print("The current temperature in F is: ", fahrenheit)
      return(celsius, fahrenheit)

并将其称为:

temperature(celsius, fahrenheit)

或使用关键字:

def temperature(celsius=15, fahrenheit=59):
      print("The current temperature in C is: ", celsius)
      print("The current temperature in F is: ", fahrenheit)
      return(celsius, fahrenheit)

这样称呼:

temperature() # --> use the default parameters
#or 
temperature(celsius=0, fahrenheit=10) --> change the values of your parameters

但是在这两种方式中,没有必要像你所做的那样覆盖函数中的变量。

更新

变量celsius的值由用户在控制台中键入变量值时设置:

celsius = float(input("Type in the celsius temperature: "))

函数convert()做了什么?

def convert():
     celsius = float(input("Type in the celsius temperature: ")) #<-- set the value of the variable to that entered by the user thanks to input()
     fahrenheit = celsius * (9 / 5) + 32 # <-- creates the variable from celsius
     display(celsius, fahrenheit) # <-- calls the display function with celsius and fahrenheit being well defined

input将用户输入的值作为string,然后将其转换为int