Python lambda 用作参数,从父函数调用其他参数
Python lambda used as an argument, calling other arguments from parent function
我是编程新手,在理解 Python 中的 lambda 函数时遇到了一些困难。我理解为什么使用它及其有效性。只是在学习应用它时遇到困难。我已经阅读了指南并观看了有关使用 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)
需要分别 return 30、24 和 32。
不使用 lambda 的工作代码:
def Coord(x, y, z):
while z < x or z < y:
z*=2
print(z)
您不能在 z 的默认参数定义中使用 Coord 函数的其他参数(在您的情况下是 lambda 函数)。
你可能想做这样的事情:
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())
这两个定义在用 3 个参数求值时是等价的,它们的结果是:
>>> Coord(10,20,30)
30
>>> Coord(10,20,12)
24
>>> Coord(10,20,8)
16
我是编程新手,在理解 Python 中的 lambda 函数时遇到了一些困难。我理解为什么使用它及其有效性。只是在学习应用它时遇到困难。我已经阅读了指南并观看了有关使用 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)
需要分别 return 30、24 和 32。 不使用 lambda 的工作代码:
def Coord(x, y, z):
while z < x or z < y:
z*=2
print(z)
您不能在 z 的默认参数定义中使用 Coord 函数的其他参数(在您的情况下是 lambda 函数)。
你可能想做这样的事情:
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())
这两个定义在用 3 个参数求值时是等价的,它们的结果是:
>>> Coord(10,20,30)
30
>>> Coord(10,20,12)
24
>>> Coord(10,20,8)
16