Python lambda


在Python中,匿名函数意味着函数没有名称。我们已经知道 def 关键字用于定义普通函数,而 lambda 关键字用于创建匿名函数。

Python lambda 语法:

lambda arguments : expression

Python lambda 示例:

  • Python3
calc = lambda num: "Even number" if num % 2 == 0 else "Odd number"

print(calc(20))

输出:

Even number

Python lambda 属性:

  • 该函数可以有任意数量的参数,但只能有一个表达式,该表达式将被计算并返回。
  • 只要需要函数对象,就可以自由使用 lambda 函数。
  • 您需要记住,lambda 函数在语法上仅限于单个表达式。
  • 除了函数中的其他类型的表达式之外,它在特定的编程领域还有多种用途。

示例 1:演示 Python lambda 关键字返回类型的程序

  • Python3
string = 'GeeksforGeeks'

# lambda returns a function object
print(lambda string: string)

输出

<function <lambda> at 0x7fd7517ade18>

说明:在上面的示例中,print 函数并未调用 lambda,而只是返回函数对象及其存储的内存位置。因此,为了让 print 首先打印字符串,我们需要调用 lambda,以便字符串能够通过 print。

示例2:调用lambda返回值执行各种操作

在这里,我们将各种类型的参数传递给不同的 lambda 函数,并打印 lambda 函数调用生成的结果。

  • Python3
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

示例 3: lambda 和普通函数调用之间的区别

lambda函数与使用def关键字定义的其他函数的主要区别在于,我们不能在 lambda 函数内使用多个语句,并且 lambda 语句内允许的语句也非常有限。使用lambda函数进行复杂的操作可能会影响代码的可读性。

  • Python3
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

示例 4:在函数内部使用 lambda 函数会更有用。

我们可以在map()、filter()、sorted()和许多其他函数中使用lambda函数。在这里,我们演示了如何在一些最常见的 Python 函数中使用 lambda 函数。

  • Python3
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 函数从列表中过滤掉偶数的示例:

  • Python3
# 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