3.4 python基础 - 动态函数调用、Lambda表达式与推导式

50 阅读2分钟

动态函数调用

在Python中,函数名实际上是一个指向函数对象的变量。这意味着我们可以在运行时动态地引用和调用函数。这为编程带来了极大的灵活性,尤其是在与字典结合使用时。

字典与函数结合

我们可以将函数名作为字典的键,这样就可以通过字典来动态调用不同的函数。这种方式非常适合于实现基于配置的代码或者根据不同条件执行不同操作的场景。

# 定义几个函数
def greet(name):
    return f"Hello, {name}!"

def farewell(name):
    return f"Goodbye, {name}!"

# 创建一个字典,将函数名映射到函数对象
func_dict = {
    'greet': greet,
    'farewell': farewell
}

# 根据输入动态调用函数
action = input("Do you want to 'greet' or 'farewell'? ")
name = input("What is your name? ")
result = func_dict[action](name)
print(result)

Lambda表达式

Lambda表达式,也称为匿名函数,是一种简洁的定义函数的方式。它通常用于需要一个函数对象,但又不想费事去定义一个完整的函数的情况。

Lambda表达式的定义

Lambda表达式的一般语法是:

lambda arguments: expression

这里的arguments是参数列表,而expression是当调用这个lambda表达式时计算并返回的表达式。

使用Lambda表达式

Lambda表达式可以被赋值给一个变量,或者作为参数传递给其他函数。

# 使用Lambda表达式进行简单的数学运算
add = lambda x, y: x + y
print(add(5, 3))  # 输出 8

# 将Lambda表达式作为参数传递给sorted函数
numbers = [3, 1, 4, 1, 5, 9, 2]
print(sorted(numbers, key=lambda x: x))  # 按数值排序

Lambda与普通函数的比较

  • Lambda表达式是匿名的,即它们没有名称。
  • Lambda表达式只能包含一个表达式,而普通函数可以包含多条语句。
  • Lambda表达式通常用于简单的函数,而普通函数适用于更复杂的逻辑。

推导式

推导式是Python中一种简洁的构建列表、字典等数据结构的方式。

列表推导式

列表推导式提供了一种从其他列表或任何可迭代对象创建新列表的方法。

# 创建一个包含平方数的列表
squares = [x**2 for x in range(10)]
print(squares)  # 输出 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

字典推导式

字典推导式与列表推导式类似,但是它用于创建字典。

# 创建一个字典,其中包含数字及其对应的平方
square_dict = {x: x**2 for x in range(5)}
print(square_dict)  # 输出 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

推导式不仅可以使代码更加简洁,而且执行效率也往往比等价的循环更高。