我对Python还是很陌生,我正忙于弄清楚这些讨厌的函数是如何工作的。我正在编写的程序应该可以解决三角形的问题,但实际上我无法它可以将局部变量返回给其他函数。任何帮助将不胜感激!
# Area of a triangle
base = 0
height = 0
area = 0
def inData():
base = float(raw_input("Base:"))
height = float(raw_input("Height:"))
return base
return height
def triangle(b,h):
area = b / 2 * h
return area
if __name__ == '__main__':
inData()
triangle(base, height)
print "The area of a triangle of base", base, "and height" , height, "will be", area
我在您的代码中看到了很多问题和误解。让我看看我是否可以从头开始,并尝试为您传达完成这些功能的正确方法。最后,我们将提供您的代码的有效版本。:)
注意:您不必在Python中提前声明函数-它本身就是这样做的!因此,不需要base, height, area
顶部!
简而言之,功能是捆绑在一起运行的命令集。你知道这个。不过,您缺少的是参数和参数以及return vs print的概念。
参数与参数定义函数时,您要设置自己希望将来执行的操作,并且随时随地调用。就像f(x)
数学中的任何函数一样,您需要一个方程,该方程可以与您输入的任何内容一起使用。对于f(x)
,x
是您的输入。
在编程中,这称为参数。因此,当您使用Python编写代码时:
def Function(x):
y = x*x
return y
您已定义x
为参数。现在,参数是您放入函数中参数所在的值。在代数中,适用的想法是定义一个变量。知道这一点后,当您实际使用该功能时:
Function(2)
您会回来的,因为您说了4 run Function(x) where x = 2
。
这是“参数与参数”的概念。这非常有用,因为您并不总是希望在功能内部要求用户输入。您的功能越直接,它所能做的就越少。例如,有时您想使用相同的函数在后台进行数学运算。raw_input()
如果您希望该过程在后台独立运行,您将不会很好,对吗?
这是Arguments vs Parameters的真实值。
退货与打印
与不使用相同,raw_input()
因为它太直接了,您要避免使用print
,return
而是改用。我知道您没有print
在这里使用,但是您误解了它的工作原理,return
我认为同样的教训适用。
这是一个示例:您有两个功能。
def Function1(x,y):
z = x*y
print z
def Function2(x,y):
z = x*y
return z
函数1打印 z
,这意味着,无论您要执行什么操作,它都会始终显示print z
在控制台上,即使您只是想进行数学计算也是如此。
同时,函数2returns z
表示将其值返回z
给被调用的程序。还值得注意的是,一旦函数上线return
,它将停止进一步运行函数。除此之外,没有理由编写代码,因为不再运行该函数,除非您跳过了更高级的代码return
(例如,一条if
语句)。
为什么在return
概念上如此重要?
因为在您的原始代码中运行了该函数inData()
,然后,您不仅运行了return
两次,而且在您的if
语句中,甚至不使用inData
返回值,而只是告诉程序运行 inData()
。
当函数返回值时,您必须将其分配给某些对象。以任何随机编程语言中的简单数学为例。代码:
x = sqrt(4)
print x
将输出2
,因为在函数末尾sqrt()
,它将返回其答案。在这里,我们分配了一个给x
to的变量。确实是这样的:sqrt(4)
return
sqrt(4)
也会打印2
到控制台,这是由于语言开发人员的防呆设计,实际上,该语言假定您要打印代码。您不是在告诉它这样做。
因此,当您运行代码行时:
inData()
triangle(base, height)
您基本上是在说:
run the function inData()
run the function triangle(base, height)
当由于他们的原因时returns
,您需要说:
set <variable1> equal to the return of inData()
set <variable2> equal to the return of triangle(base,height)
(这里需要做更多的简化,但是我们稍后会介绍)。
最后一件事return
。在编程中,写:
x = 1+1
return x
当return 1+1
完成同一件事时。因此,没有必要界定一下area
三角形会和随后 return
的area
。只需告诉函数return
它area
在同一行代码中计算出的内容即可!
我失去了你吗?还在我这儿?好!
您的代码有一些结构性问题,尽管它可能会起作用,但会使查看它的更多经验丰富的程序员感到困惑。当我们在这里时,为什么不让我知道您是否可以理解这是一个更好的做法。
在您的代码中,您已经编写了(摘要形式)
variables defined that you don't need
def FunctionThatGathersData()
def FunctionThatDoesTheMath(x,y)
if (condition)
FunctionThatGathersData()
FunctionThatDoesTheMath(x,y)
print out the results
这种结构会使具有更多经验的程序员感到困惑。他可能会问以下问题:
FunctionThatGathersData
和FunctionThatDoesTheMath
?其中一些原因已在上面阐明,但让我们来看最后两个问题。
为什么要定义变量?:一方面,Python在执行期间处理变量。因此,您不必提前定义它们,但是您可以定义,其优点如下:
x = 0
def Function()
x = 5
y = 10
查看此代码,您可能想知道为什么x
要定义。简单的答案是,Python将看到您已经有一个x
,因此,当您运行时Function()
,您希望使用函数中的工作将其覆盖。y
另一方面,由于没有先前的定义,因此将创建一个新变量。
但是,在您的函数中,我们不需要任何这些,因为您的答案以最佳形式出现,无需依赖x
函数外部。
为什么我们不能仅使用我们了解的有关参数,参数和返回值的方法将两个函数组合在一起?(提示:我们可以!)
这是一个新的代码片段,您现在应该可以阅读和理解。将您的内容清除一下,看看是否有意义。在其中,您将:
DoTheMathAndThenGiveMeTheValueBack
__name__ == '__main__'
base
和height
,然后area
根据函数的返回。def CalculateTriangleArea(b,h):
return b / 2 * h
if __name__ == '__main__':
base = float(raw_input("Base:"))
height = float(raw_input("Height:"))
area = CalculateTriangleArea(base,height)
print "The area of a triangle of base", base, "and height", height, "will be", area
如果你不神交此,请评论并问我了,因为我记得这个挣扎,知道您有什么误会。
哦! 而且我忘了向您提及如何处理多个问题returns
。
如果您需要在一个函数中返回多个值,则可以通过array
或来返回tuple
。这只是您存储的值的列表。您可以在访问任何项目array
或tuple
通过包括index
在形式结束[i]
,其中第一项是在[0]
。例如:
def Function():
string1 = "nobody"
string2 = "expects"
string3 = "the"
string4 = "spanish"
string5 = "inquisition"
return string1, string2, string3, string4, string5
print Function()[0]
print Function()[1]
print Function()[2]
print Function()[3]
print Function()[4]
print Function() #prints the whole tuple!
会给你:
nobody
expects
the
spanish
inquisition
('nobody', 'expects', 'the', 'spanish', 'inquisition')
理解?:)
欲了解更多动手在Python的工作,尝试这个惊人的Python教程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句