Python 中的 lambda 函数就像一个迷你函数,可以快速创建并使用而无需命名它。
它也被称为“匿名”或“内联”函数,因为不会像使用关键字def的常规函数那样为其指定专有名称。
何时使用?
- 当需要一个小函数来执行短期任务(例如对列表进行排序或对元素执行简单操作)时,Lambda 函数非常方便。
- 在不想使用名称定义完整函数的情况下使用它们。
什么时候不使用它?
- 避免将 lambda 函数用于复杂任务,或者如果您需要多次重用同一函数。
- Lambda 函数最适合简单的一次性使用案例。
为什么叫自定义函数?
- Lambda 函数有时称为“自定义函数”,因为可以为特定目的定义它们并当场自定义它们。它们就像用于特定任务的定制工具。
以下 Lambda 函数示例:
示例 1:基本 Lambda
add = lambda x, y: x + y
result = add(3, 4)
print(result) # Output: 7
示例 2:对元组列表进行排序
students = [("Alice", 25), ("Bob", 30), ("Charlie", 20)]
students.sort(key=lambda student: student[1])
print(students) # Output: [('Charlie', 20), ('Alice', 25), ('Bob', 30)]
示例 3:筛选偶数
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Output: [2, 4, 6]
示例 4:将 Lambda 与 Map 结合使用
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # Output: [1, 4, 9, 16, 25]
示例 5:将列表与 Lambda 结合使用
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
student_info = list(map(lambda x, y: (x, y), names, scores))
print(student_info) # Output: [('Alice', 85), ('Bob', 92), ('Charlie', 78)]
示例 6:列表推导式中的 Lambda
numbers = [1, 2, 3, 4, 5]
doubled = [(lambda x: x * 2)(num) for num in numbers]
print(doubled) # Output: [2, 4, 6, 8, 10]
示例 7:具有条件逻辑的 Lambda
is_even = lambda x: "Even" if x % 2 == 0 else "Odd"
print(is_even(4)) # Output: Even
示例 8:对词典列表进行排序
students = [{'name': 'Alice', 'score': 85}, {'name': 'Bob', 'score': 92}]
students.sort(key=lambda student: student['score'])
print(students) # Output: [{'name': 'Alice', 'score': 85}, {'name': 'Bob', 'score': 92}]
Example 9: Using Lambda with Recursion
factorial = lambda n: 1 if n == 0 else n * factorial(n-1)
print(factorial(5)) # Output: 120
Example 10: Sorting a List of Strings by Length
words = ['apple', 'banana', 'cherry', 'date', 'fig']
words.sort(key=lambda word: len(word))
print(words)
# Output: ['date', 'fig', 'apple', 'banana', 'cherry']
Example 11: Extracting Initials from Names
names = ['Alice Johnson', 'Bob Smith', 'Charlie Brown']
initials = list(map(lambda name: ''.join(word[0] for word in name.split()), names))
print(initials) # Output: ['AJ', 'BS', 'CB']
Example 12: Generating Fibonacci Sequence
from functools import reduce
fibonacci = lambda n: reduce(lambda x, _: x + [x[-1] + x[-2]], range(n - 2), [0, 1])
print(fibonacci(10)) # Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
示例 13:模拟掷骰子
import random
roll_dice = lambda: random.randint(1, 6)
print("You rolled a", roll_dice()) # Output: A random number between 1 and 6
示例 14:创建迷你计算器
calculator = lambda x, y, op: (x + y) if op == 'add' else (x - y) if op == 'subtract' else (x * y) if op == 'multiply' else (x / y) if op == 'divide' else None
result = calculator(5, 3, 'multiply')
print("Result:", result) # Output: 15
示例 15:使用 Lambda 反转列表
reverse_list = lambda lst: lst[::-1]
original_list = [1, 2, 3, 4, 5]
reversed_list = reverse_list(original_list)
print(reversed_list) # Output: [5, 4, 3, 2, 1]
示例 16:检查回文
is_palindrome = lambda s: s == s[::-1]
print(is_palindrome("racecar")) # Output: True
示例 17:将华氏度转换为摄氏度
fahrenheit_to_celsius = lambda f: (f - 32) * 5/9
print(fahrenheit_to_celsius(98.6))
# Output: 37.0 (approximately)
示例 18:计算字符串中的元音
count_vowels = lambda s: sum(1 for char in s if char.lower() in 'aeiou')
print(count_vowels("Hello, World!"))
# Output: 3
示例 19:模拟计时器
import time
start_timer = lambda: time.time()
end_timer = lambda start_time: time.time() - start_time
start = start_timer()
time.sleep(2)
print("Elapsed time:", end_timer(start))
# Output: Elapsed time: 2.0 (approximately)
示例 20:使用随机字符生成密码
import string
import random
generate_password = lambda length: ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))
password = generate_password(8)
print("Generated Password:", password)
# Output: A random 8-character password