python 内置高阶函数(附示例)

2511 篇文章 2 订阅
2348 篇文章 14 订阅

软件测试面试刷题,这个小程序(永久刷题),靠它可以快速找到工作!https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502

map(func, iterable[, iterable, ...])

功能:对iterable中的每个元素应用func函数,并返回一个迭代器。如果提供了多个iterable,则func会同时作用于相同位置的元素。

示例:

numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2, numbers)
print(list(squared))  # 输出:[1, 4, 9, 16]

filter(func, iterable)

功能:构造一个迭代器,从iterable中选择那些使func返回True的元素。

示例:

numbers = [1, -2, 3, -4, 5]
positive_numbers = filter(lambda x: x > 0, numbers)
print(list(positive_numbers))  # 输出:[1, 3, 5]

reduce(func, iterable[, initializer])

功能:对iterable中的元素进行累积操作,从左到右应用func函数,最终减少到单个值。initializer是可选的初始值。

注意:reduce 3中已移至functools模块。

示例:

from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 输出:24

sorted(iterable[, key][, reverse])

功能:对iterable中的元素进行排序,返回一个新的排序列表。key是一个函数,用于确定排序的依据;reverse为True表示降序。

示例:

words = ['banana', 'apple', 'cherry']
sorted_words = sorted(words, key=len)
print(sorted_words)  # 输出:['apple', 'cherry', 'banana']

enumerate(iterable[, start=0])

功能:同时返回iterable中元素的索引和值,常用于for循环中获取元素的位置信息。

示例:

fruits = ['apple', 'banana', 'mango']
for i, fruit in enumerate(fruits):
    print(f"Index: {i}, Fruit: {fruit}")
输出:
Index: 0, Fruit: apple
Index: 1, Fruit: banana
Index: 2, Fruit: mango

*zip(iterables)

功能:将多个iterable打包成一个元组的迭代器,元组中的元素分别来自传入的每个iterable。当最短的iterable被耗尽后,迭代就会停止。

示例:

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 30, 19]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old.")
输出:
Alice is 24 years old.
Bob is 30 years old.
Charlie is 19 years old.

any(iterable) / all(iterable)

功能:any(iterable)如果iterable中有一个元素为真(或非零),则返回True;否则返回False。all(iterable)只有当iterable中所有元素均为真时才返回True。

示例:

numbers = [0, False, None, [], {}, 1]
print(any(numbers))  # 输出:True,因为有1这个真值
print(all(numbers))  # 输出:False,因为有假值存在

lambda

功能:用于快速定义简单的匿名函数。它不是一个独立的函数,但经常与其他高级函数一起使用,特别是在需要传递小函数作为参数的场合。

语法:lambda arguments: expression

示例:

double = lambda x: x * 2
print(double(5))  # 输出:10

list comprehension / dictionary comprehension / set comprehension

功能:这些是构造列表、字典、集合的快捷方式,结合了循环、条件判断和表达式,比传统的循环结构更简洁、易读。

示例(以列表推导为例):

numbers = [1, 2, 3, 4, 5]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares)  # 输出:[4, 16]

itertools模块

功能:提供了许多用于创建高效迭代器的函数,非常适合处理数据管道和流式处理场景。比如chain, cycle, repeat, product, permutations, combinations等。

示例:

from itertools import chain, combinations
# 合并多个列表
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list(chain(list1, list2))
print(combined)  # 输出:[1, 2, 3, 4, 5, 6]
# 计算组合
combos = list(combinations('ABCD', 2))
print(combos)  # 输出:[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

contextlib.contextmanager

功能:这是一个装饰器,用来定义上下文管理器,即with语句中使用的对象。这使得你可以更简洁地处理资源的获取和释放,比如文件操作、线程锁等。

示例:

from contextlib import contextmanager
@contextmanager
def managed_file(name):
    try:
        f = open(name, 'r')
        yield f
    finally:
        f.close()
with managed_file('hello.txt') as f:
    for line in f:
        print(line, end='')

这段代码会自动管理文件的打开和关闭。‍

functools.partial

功能:这个函数用于固定一个函数的部分参数,从而创建一个新的函数。这对于创建具有默认参数值的函数变体非常有用。

示例:

from functools import partial
def power(base, exponent):
    return base ** exponent
square = partial(power, exponent=2)
print(square(3))  # 输出:9

gc.collect()

功能:属于垃圾回收模块gc的一部分,手动触发垃圾回收。虽然在大多数情况会自动管理内存,但在某些特定场景下,手动调用垃圾回收可以立即回收不再使用的内存空间。

示例:

import gc
# 大量分配和释放内存后...
gc.collect()  # 手动触发垃圾回收

asyncio模块和异步编程

功能:asyncio用于编写并发代码的库,利用异步I/O、协程(coroutine)、事件循环(event loop)等机制,使得程序能够在等待I/O操作(如网络请求、磁盘读写)时不阻塞,从而实现更高的并发性能。

示例:

import asyncio
async def my_coroutine():
    print("Starting the coroutine")
    await asyncio.sleep(1)  # 异步等待1秒
    print("Coroutine finished")
asyncio.run(my_coroutine())  # 使用asyncio.run启动事件循环并运行协程

此例展示了如何定义和运行一个简单的异步协程。

decorator装饰器

功能:装饰器是一种特殊类型的函数,可以修改其他函数的功能或行为,无需修改被装饰函数的源代码。装饰器广泛应用于日志记录、性能测试、权限校验等功能增强。

示例:

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper
@my_decorator
def say_hello():
    print("Hello!")
say_hello()

上述代码中,@my_decorator装饰了say_hello函数,在其调用前后添加了额外的行为。

生成器(generator)

功能:生成器是一种特殊的迭代器,使用yield关键字定义。它可以暂停函数的执行并在之后恢复,非常适合处理大量数据或实现惰性求值的场景,以节省内存。

示例:

def fibonacci(n):
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a + b
for number in fibonacci(100):
    print(number, end=' ')

这个生成器会按需计算斐波那契数列的前n项,而不是一次性生成所有数。

with语句和上下文管理器

功能:with语句用于临时管理资源,如打开和关闭文件、获取和释放锁等。它通过上下文管理器(实现了__enter__和__exit__方法的对象)自动处理资源的分配和清理。

示例(之前已展示过,这里简要回顾):

with open('file.txt', 'r') as file:
    content = file.read()

这段代码会在读取文件内容后自动关闭文件,即使发生异常也是如此。

元类(Metaclasses)

功能:元类允许你在创建类时自定义类的行为。简单来说,元类就是用来创建类的“类”。它们的面向对象编程中提供了极高的灵活性,常用于框架和库的开发,以实现类的动态修改、注册、验证等功能。

示例:

class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f"Creating class: {name}")
        return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
    pass
# 输出: Creating class: MyClass

在这个例子中,Meta是一个元类,当创建MyClass时,Meta的__new__方法会被调用。

路径操作与pathlib模块

功能:pathlib模块提供了面向对象的文件系统路径操作方式,使得处理文件和目录路径变得更加简洁和直观。

示例:

from pathlib import Path
path = Path('mydir') / 'myfile.txt'
if not path.exists():
    path.write_text("Hello, World!")
content = path.read_text()
print(content)
pathlib.Path对象可以像字符串一样拼接,并提供了丰富的文件操作方法。

类型注解(Type Annotations)

功能:类型注解 3.5开始引入,允许开发者为变量、函数参数和返回值指定预期的数据类型。这不仅提高了代码的可读性,还便于静态分析工具和IDE提供更好的类型检查和自动补全功能。

示例:

def add_numbers(a: int, b: int) -> int:
    return a + b
result = add_numbers(1, '2')  # 这将在某些IDE中引发类型警告

上面的函数指定了输入参数和返回值的类型,有助于避免类型错误。

枚举(Enum)类

功能:枚举(Enum)标准库中的一个类,用于创建一组命名的常量。枚举类型的成员是唯一的,且可以比较,非常适合定义程序中的状态、选项等。

示例:

from enum import Enum
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
favorite_color = Color.RED
print(favorite_color.name)  # 输出: RED

枚举提供了安全且易于理解的方式来处理特定值集合。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值