函数式编程之惰性求值和无限序列

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客文章浏览阅读789次,点赞37次,收藏4次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5501惰性求值是函数式编程中的一个重要概念,它指的是在需要时才进行计算,而不是立即计算所有结果。这种计算策略可以带来许多优势,特别是在处理无限序列和大规模数据时。生成器和迭代器是实现惰性求值的常用工具。下面是10个实用的场景代码,展示了惰性求值和处理无限序列的应用:

1. 生成斐波那契数列

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib = fibonacci()
for i in range(10):
    print(next(fib))  # 输出: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34

通过使用生成器函数,我们可以无限地生成斐波那契数列,而不需要事先计算所有的值。

2. 生成无限自然数序列

def natural_numbers():
    n = 1
    while True:
        yield n
        n += 1

numbers = natural_numbers()
for i in range(10):
    print(next(numbers))  # 输出: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

通过生成器函数,我们可以生成无限的自然数序列。

3. 使用生成器表达式处理大规模数据​​​​​​​

data = [1, 2, 3, 4, 5, ...]  # 大规模数据

result = (x * 2 for x in data if x % 2 == 0)
for value in result:
    print(value)

通过使用生成器表达式,我们可以在处理大规模数据时,逐个生成结果值,而不需要一次性加载整个数据集。

4. 惰性读取大文件​​​​​​​

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line

lines = read_large_file('large_file.txt')
for line in lines:
    process_line(line)

通过生成器函数,我们可以逐行地从大文件中读取数据,而不需要一次性加载整个文件。

5. 生成无限序列的平方数​​​​​​​

squares = (x**2 for x in natural_numbers())

for i in range(10):
    print(next(squares))  # 输出: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

通过生成器表达式,我们可以生成无限序列的平方数。

6. 惰性筛选质数​​​​​​​

def primes():
    primes_list = []
    yield 2
    for n in natural_numbers():
        if all(n % p != 0 for p in primes_list):
            primes_list.append(n)
            yield n

prime_gen = primes()
for i in range(10):
    print(next(prime_gen))  # 输出: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29

通过生成器函数,我们可以无限地生成质数序列,并且只计算需要的质数。

7. 惰性计算斐波那契数列的第n项​​​​​​​

def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a

fib_n = fibonacci(10)  # 只计算第10项
print(fib_n)  # 输出: 55

通过生成器函数,我们可以实现惰性计算斐波那契数列的第n项,而不需要计算所有的项。

8. 惰性处理无限序列的元素​​​​​​​

def process_infinite_sequence(seq):
    for item in seq:
        process_item(item)
        if should_stop(item):
            break

infinite_seq = natural_numbers()
process_infinite_sequence(infinite_seq)

通过生成器函数和惰性处理,我们可以处理无限序列的元素,并在需要时停止处理。

9. 惰性处理大规模数据的分块​​​​​​​

def process_large_data(data):
    chunk_size = 1000
    for i in range(0, len(data), chunk_size):
        chunk = data[i:i+chunk_size]
        process_chunk(chunk)

large_data = [1, 2, 3, 4, 5, ...]  # 大规模数据
process_large_data(large_data)

通过生成器函数和惰性处理,我们可以逐块地处理大规模数据,而不需要一次性加载整个数据集。

10. 惰性计算无限序列的累加和​​​​​​​

def accumulate(seq):
    total = 0
    for item in seq:
        total += item
        yield total

numbers = natural_numbers()
accumulated = accumulate(numbers)
for i in range(10):
    print(next(accumulated))  # 输出: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55

通过生成器函数和惰性计算,我们可以生成无限序列的累加和。

这些场景代码展示了惰性求值和处理无限序列的应用。通过使用生成器和迭代器,我们可以在处理大规模数据和无限序列时,节省内存和计算资源,并提供更高效的计算方式。

希望这些示例能帮助您理解惰性求值的概念和优势,并在实际开发中灵活应用。如果您有任何进一步的问题,请随时提问。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】在这里插入图片描述
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值