在Python中,匿名函数意味着函数没有名称。我们已经知道 def 关键字用于定义普通函数,而 lambda 关键字用于创建匿名函数。
lambda arguments : expression
calc = lambda num: "Even number" if num % 2 == 0 else "Odd number" print(calc(20))
输出:
Even number
string = 'GeeksforGeeks' # lambda returns a function object print(lambda string: string)
输出
<function <lambda> at 0x7fd7517ade18>
说明:在上面的示例中,print 函数并未调用 lambda,而只是返回函数对象及其存储的内存位置。因此,为了让 print 首先打印字符串,我们需要调用 lambda,以便字符串能够通过 print。
在这里,我们将各种类型的参数传递给不同的 lambda 函数,并打印 lambda 函数调用生成的结果。
filter_nums = lambda s: ''.join([ch for ch in s if not ch.isdigit()]) print("filter_nums():", filter_nums("Geeks101")) do_exclaim = lambda s: s + '!' print("do_exclaim():", do_exclaim("I am tired")) find_sum = lambda n: sum([int(x) for x in str(n)]) print("find_sum():", find_sum(101))
filter_nums(): Geeks do_exclaim(): I am tired! find_sum(): 2
lambda函数与使用def关键字定义的其他函数的主要区别在于,我们不能在 lambda 函数内使用多个语句,并且 lambda 语句内允许的语句也非常有限。使用lambda函数进行复杂的操作可能会影响代码的可读性。
def cube(y): print(f"Finding cube of number:{y}") return y * y * y lambda_cube = lambda num: num ** 3 # invoking simple function print("invoking function defined with def keyword:") print(cube(30)) # invoking lambda function print("invoking lambda function:", lambda_cube(30))
invoking function defined with def keyword: Finding cube of number:30 27000 invoking lambda function: 27000
我们可以在map()、filter()、sorted()和许多其他函数中使用lambda函数。在这里,我们演示了如何在一些最常见的 Python 函数中使用 lambda 函数。
l = ["1", "2", "9", "0", "-1", "-2"] # sort list[str] numerically using sorted() # and custom sorting key using lambda print("Sorted numerically:", sorted(l, key=lambda x: int(x))) # filter positive even numbers # using filter() and lambda function print("Filtered positive even numbers:", list(filter(lambda x: not (int(x) % 2 == 0 and int(x) > 0), l))) # added 10 to each item after type and # casting to int, then convert items to string again print("Operation on each item using lambda and map()", list(map(lambda x: str(int(x) + 10), l)))
Sorted numerically: ['-2', '-1', '0', '1', '2', '9'] Filtered positive even numbers: ['1', '9', '0', '-1', '-2'] Operation on each item using lambda and map() ['11', '12', '19', '10', '9', '8']
在此示例中,我们定义了一个 lambda 函数,它接受参数 x 并加 10。然后,我们使用 map() 函数将 lambda 函数应用于列表 my_list 中的每个元素。最后,我们将结果转换为列表并打印。
这是另一个使用 lambda 函数从列表中过滤掉偶数的示例:
# Example list my_list = [1, 2, 3, 4, 5] # Use lambda to filter out even numbers from the list new_list = list(filter(lambda x: x % 2 != 0, my_list)) # Print the new list print(new_list)
[1,3,5]
方法:
使用一些数字定义列表“my_list”。 使用带有过滤器的 lambda 函数来检查列表中的数字是否为偶数。 使用list()函数将过滤器对象转换为列表并将其存储在new_list中。 打印带有奇数的新列表。 时间复杂度: 过滤函数的时间复杂度为 O(n),其中 n 是列表中元素的数量。lambda 函数不会影响时间复杂度,因为它是一个简单的检查,需要恒定的时间。
空间复杂度: 此代码的空间复杂度为 O(n),因为它创建了一个仅包含原始列表中奇数的新列表。原始列表没有被修改,因此它保持相同的大小。
原文链接:codingdict.net