Python中常见的函数类型(高阶函数 map、filter、reduce|内置函数enumerate 的应用)

Python中常见的函数类型

内置函数(Built-in Functions):这些函数是编程语言内置的函数,可以在任何时候直接使用,无需导入额外的模块。例如,print()、len()、range() 等都是 Python 的内置函数。

自定义函数(Custom Functions):这些函数是由程序员根据特定需求自己定义的函数。通过使用 def 关键字来创建函数,并在需要时调用它们。自定义函数可以根据需求实现特定的功能,提高代码的可重用性和可维护性。

匿名函数(Anonymous Functions):也称为 lambda 函数,是一种没有名称的函数。它们是一种简洁的方式来定义简单的函数,通常用于需要一个简单函数作为参数传递给其他函数的情况。在 Python 中,可以使用 lambda 关键字来创建匿名函数。

递归函数(Recursive Functions):递归函数是一种调用自身的函数。它们在解决需要重复执行相同操作的问题时非常有用。递归函数通过将问题分解为更小的子问题来解决,并在达到基本情况时停止递归。

高阶函数(Higher-Order Functions):高阶函数是接受一个或多个函数作为参数,并/或返回一个函数的函数。它们可以用于函数的组合、函数的包装、函数的延迟执行等场景。

生成器函数(Generator Functions):生成器函数是一种特殊类型的函数,使用 yield 关键字来生成迭代器。它们可以按需生成值,而不是一次性生成所有的值。生成器函数在处理大型数据集或需要延迟计算时非常有用。

内置函数

这些函数是编程语言内置的函数,可以在任何时候直接使用,无需导入额外的模块。例如,print()、len()、range() 等都是 Python 的内置函数。

enumerate

是一个内置函数,用于在迭代过程中同时获取索引和对应的元素值。

语法:enumerate(iterable, start=0)
iterable:要迭代的对象,可以是列表、元组、字符串、字典、集合或其他可迭代对象。
start(可选):指定起始的索引值,默认为 0。
fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits):
    print(index, fruit)    
# 输出
# 0 apple
# 1 banana
# 2 orange

在这个示例中,我们使用 enumerate(fruits) 来迭代列表 fruits。在每次迭代中,enumerate() 函数返回一个包含索引和元素值的元组。我们将这两个值分别赋给变量 index 和 fruit,然后打印输出。

enumerate() 函数常用于需要同时访问索引和元素值的情况,例如在循环中对序列进行遍历时。它简化了代码,避免了手动跟踪索引变量的麻烦。

需要注意的是,enumerate() 返回的是一个迭代器,如果需要获取完整的索引和元素值列表,可以将其转换为列表:

fruits = ['apple', 'banana', 'orange']
#如果不转为列表,enumerated_fruits打印输出:<enumerate object at 0x7fa648208910>
enumerated_fruits = list(enumerate(fruits))
print(enumerated_fruits)
#输出 [(0, 'apple'), (1, 'banana'), (2, 'orange')]

备注:在 enumerate() 函数中,索引值始终分配给解构操作的第一个变量,而元素值分配给解构操作的第二个变量。这是 enumerate() 函数的固定行为,无法改变索引和元素的分配顺序。

高阶函数

高阶函数是指可以接受其他函数作为参数或返回函数作为结果的函数。它们可以用于函数的组合、函数的包装、函数的延迟执行等场景。

map函数

  • 语法:map(function, iterable) ,是Python的内置函数

  • 功能:对可迭代对象中的每个元素应用指定的函数,并返回一个由函数结果组成的迭代器。

  • 示例

    #将列表中的每个元素平方
    numbers = [1, 2, 3, 4, 5]
    squared = map(lambda x: x**2, numbers)
    print(list(squared))  # 输出:[1, 4, 9, 16, 25]
    
    # 将字符串列表中的每个字符串转换为大写:
    words = ['apple', 'banana', 'cherry']
    uppercase = map(str.upper, words)
    print(list(uppercase))  # 输出:['APPLE', 'BANANA', 'CHERRY']
    

filter 函数

  • 语法:filter(function, iterable),是Python的内置函数

  • 功能:对可迭代对象中的每个元素应用指定的函数,根据函数返回值(True 或 False)决定是否保留该元素,并返回一个由保留元素组成的迭代器。

  • 示例:

    #从列表中筛选出所有的偶数
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    even_numbers = filter(lambda x: x % 2 == 0, numbers)
    print(list(even_numbers))  # 输出:[2, 4, 6, 8, 10]
    
    #从列表中筛选出所有的偶数
    words = ['apple', 'banana', 'cherry', 'date', 'elephant']
    long_words = filter(lambda x: len(x) >= 5, words)
    print(list(long_words))  # 输出:['banana', 'cherry', 'elephant']
    

reduce函数

  • 语法:reduce(function, iterable[, initializer])

  • 功能:对可迭代对象中的元素依次应用指定的函数,将结果累积计算,返回最终的聚合结果。

  • 备注:function 是一个二元函数(二元函数是一种接受两个参数并返回结果的函数),接受两个参数并返回一个结果。iterable 是一个可迭代对象,表示要进行累积计算的元素序列。initializer 是一个可选的初始值,用于进行累积计算。

  • 示例:

    from functools import reduce
    
    numbers = [1, 2, 3, 4, 5]
    
    # 使用 reduce() 函数对列表元素进行累积求和,初始值为 10
    sum_result = reduce(lambda x, y: x + y, numbers, 10)
    
    print(sum_result)  # 输出: 25
    

    在上述示例中,我们将初始值 10 作为 reduce() 函数的第三个参数传递给它。初始值 10 将作为第一次调用累积函数时的参数 x。

    累积计算的步骤如下:

      初始值 x=10 与列表的第一个元素 y=1 相加,得到 11。
    
      11 与列表的下一个元素 y=2 相加,得到 13。
    
      13 与列表的下一个元素 y=3 相加,得到 16。
    
      16 与列表的下一个元素 y=4 相加,得到 20。
    
      20 与列表的下一个元素 y=5 相加,得到 25。
    

    最后,累积计算的结果为 25。

    通过提供初始值,我们可以从初始值开始进行累积计算,而不是直接使用可迭代对象的第一个元素。
    对于第一个元素,x 是初始值。如果未指定 initializer 参数,x是可迭代对象中的第一个元素。而 y 是可迭代对象中的第二个元素。

    随后,在每次累积计算中,x 是上一次计算的结果,而 y 则是可迭代对象中的下一个元素。

匿名函数

也称为 lambda 函数,是一种没有名称的函数。它们是一种简洁的方式来定义简单的函数,通常用于需要一个简单函数作为参数传递给其他函数的情况。在 Python 中,可以使用 lambda 关键字来创建匿名函数。

lambda

lambda的应用

生成器函数

生成器函数是一种特殊类型的函数,使用 yield 关键字来生成迭代器。它们可以按需生成值,而不是一次性生成所有的值。生成器函数在处理大型数据集或需要延迟计算时非常有用。

示例:
yield 关键字来生成迭代器

递归函数

递归函数是一种调用自身的函数。它们在解决需要重复执行相同操作的问题时非常有用。递归函数通过将问题分解为更小的子问题来解决,并在达到基本情况时停止递归。

示例:

# 斐波那契数列(斐波那契数列是一个数列,其中每个数字都是前两个数字的和。数列的前两个数字通常定义为0和1,然后从第三个数字开始,每个数字都是前两个数字的和。)
def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(6))  # 输出: 8

自定义函数

这些函数是由程序员根据特定需求自己定义的函数。通过使用 def 关键字来创建函数,并在需要时调用它们。自定义函数可以根据需求实现特定的功能,提高代码的可重用性和可维护性。

示例:

#计算两个数字之和
def add_numbers(a, b):
    return a + b

result = add_numbers(5, 3)
print(result)  # 输出: 8
  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值