在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