2015-10-06 154 views
0

我是编程新手,在理解Python中的lambda函数方面有点麻烦。我明白为什么使用它和它的有效性。只是无法学会应用它。我读过一篇指南并观看了使用lambda作为参数的讲座。我试过使用地图功能。不知道如果这是正确的做法,但是这是我的断码在其最基本的形式:Python lambda用作参数,从父函数调用其他参数

def Coord(x, y, z=lambda: z*2 if z < x or z < y else z)): 
    print(z) 
Coord(10,20,30) 
Coord(10,20,12) 
Coord(10,20,8) 

需要分别返回30,24,和32。 工作代码,而无需使用lambda:

def Coord(x, y, z): 
    while z < x or z < y: 
     z*=2 
print(z) 
+1

如果你是编程新手,你可能想首先使用lambdas做一些简单的事情,并理解它们是如何工作的,因为它代表着你的代码不能远程工作。 –

+0

_“我已阅读指南并观看了使用lambda作为参数的演讲”_。有链接? – Kevin

+0

是的 该指南是https://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/ 和最后约5分钟在这里 http://ocw.mit.edu/courses/electrical-engineering-and computer-science/6-00sc-introduction-to-computer-science-and-programming-spring-2011/unit-1/lecture-9-memory-and-search-methods/ – Ahoomaha

回答

1

在默认的参数定义无法使用其他参数从坐标函数Z(这是你的情况lambda函数)。

您可能需要做这样的事情:用3个参数进行评价,当

def Coord(x, y, w, z=lambda a,b,c: c*2 if c < a or c < b else c): 
    print(z(x,y,w)) 

def Coord(x, y, w): 
    z=lambda: w*2 if w < x or w < y else w 
    print(z()) 

两个定义是等价的,它们导致:

>>> Coord(10,20,30) 
30 
>>> Coord(10,20,12) 
24 
>>> Coord(10,20,8) 
16 
+0

值得注意的是,在这种情况下,具有描述性名称的函数可能更有意义。 – moorecm

+0

谢谢,你的回答为我澄清了很多! – Ahoomaha