【10月更文挑战第19天】「Mac上学Python 30」基础篇11 - 高级循环技巧与应用

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本篇将介绍更深入的循环应用与优化方法,重点放在高级技巧和场景实践。我们将讲解enumerate()与zip()的妙用、迭代器与生成器、并发循环以及性能优化技巧。这些内容将帮助您编写更高效、结构更合理的代码。

本篇将介绍更深入的循环应用与优化方法,重点放在高级技巧和场景实践。我们将讲解enumerate()zip()的妙用、迭代器与生成器、并发循环以及性能优化技巧。这些内容将帮助您编写更高效、结构更合理的代码。


一、迭代器与生成器

1.1 使用迭代器

迭代器是一个对象,它实现了__iter__()__next__()方法。通过迭代器,可以逐个访问序列中的元素。

my_list = [1, 2, 3]
it = iter(my_list)
print(next(it))  # 输出: 1
print(next(it))  # 输出: 2
print(next(it))  # 输出: 3
1.2 使用生成器

生成器通过yield关键字返回数据,可以节省内存。与迭代器不同的是,生成器在需要时才会生成数据。

def generate_numbers():
    for i in range(5):
        yield i

gen = generate_numbers()
for num in gen:
    print(num)

输出:

0  
1  
2  
3  
4

二、enumerate()zip()的高效应用

2.1 使用enumerate()获取索引和值

enumerate()让我们在遍历序列时同时获取元素及其索引。

fruits = ['苹果', '香蕉', '樱桃']
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

输出:

0: 苹果  
1: 香蕉  
2: 樱桃
2.2 使用zip()同时遍历多个序列

zip()可以将多个序列“拉链”在一起进行并行迭代。

names = ['Alice', 'Bob']
scores = [85, 90]
for name, score in zip(names, scores):
    print(f"{name} 的成绩是 {score}")

输出:

Alice 的成绩是 85  
Bob 的成绩是 90

三、列表推导式与字典推导式

3.1 列表推导式

列表推导式是一种简洁的方式创建列表。

squares = [x ** 2 for x in range(1, 6)]
print(squares)

输出:

[1, 4, 9, 16, 25]
3.2 字典推导式

字典推导式用于生成键-值对的字典。

squares_dict = {
   x: x ** 2 for x in range(1, 6)}
print(squares_dict)

输出:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

四、循环中的异常处理

在循环中进行异常捕获,确保代码即使遇到错误也能继续执行或优雅退出。

numbers = [1, 2, '三', 4]

for num in numbers:
    try:
        print(num ** 2)
    except TypeError:
        print(f"无法计算 {num} 的平方")

输出:

1  
4  
无法计算 三 的平方  
16

五、并行循环:concurrent.futuresasyncio

5.1 使用concurrent.futures进行并行处理

当需要同时处理多个任务时,可以利用ThreadPoolExecutor进行并行执行。

import concurrent.futures

def task(n):
    return n ** 2

with concurrent.futures.ThreadPoolExecutor() as executor:
    results = executor.map(task, range(5))

for result in results:
    print(result)

输出:

0  
1  
4  
9  
16
5.2 使用asyncio处理异步任务

asyncio适用于处理I/O密集型任务,如网络请求。

import asyncio

async def async_task(n):
    await asyncio.sleep(1)
    print(f"完成任务 {n}")

async def main():
    tasks = [async_task(i) for i in range(5)]
    await asyncio.gather(*tasks)

asyncio.run(main())

输出:

完成任务 0  
完成任务 1  
完成任务 2  
完成任务 3  
完成任务 4

六、循环的性能优化

6.1 使用生成器减少内存开销

当处理大量数据时,使用生成器可以有效节省内存。

def large_range():
    for i in range(1, 10**6):
        yield i

for num in large_range():
    if num > 10:
        break
    print(num)

输出:

1  
2  
3  
...  
10
6.2 减少不必要的循环嵌套

避免深层嵌套可以提升代码效率。

# 优化前
for i in range(100):
    for j in range(100):
        if i + j == 50:
            print(i, j)

# 优化后
for i in range(51):
    j = 50 - i
    print(i, j)

七、小结

本篇介绍了Python循环中的高级技巧,包括迭代器、生成器、enumerate()zip()的高效使用,以及列表与字典推导式。我们还探讨了如何通过异常处理保障代码稳定性,并展示了并发和异步任务的实现。此外,通过性能优化技巧,您将学会编写简洁高效的循环代码,在大型项目中实现更优雅的代码结构。

八、通知

💡即日起,本系列将暂停更新两个月,全力专注于《Mac畅玩鸿蒙与硬件》系列的连载内容。感谢您的理解与支持!


上一篇: 「Mac上学Python 29」基础篇10 - 循环结构与迭代控制

下一篇: 待定

目录
相关文章
|
8天前
「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器
本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的滑块控制器应用。
140 78
「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器
|
12天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
9天前
|
UED
「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局
本篇将带你实现一个简单的照片墙布局应用,通过展示多张图片组成照片墙效果,用户可以点击图片查看其状态变化。
114 67
「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局
|
14天前
|
存储 UED
「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器
本篇将带你实现一个随机颜色变化器应用。用户点击“随机颜色”按钮后,界面背景会随机变化为淡色系颜色,同时显示当前的颜色代码,页面还会展示一只猫咪图片作为装饰,提升趣味性。
68 36
「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器
|
11天前
「Mac畅玩鸿蒙与硬件38」UI互动应用篇15 - 猜数字增强版
本篇将带你实现一个升级版的数字猜谜游戏。相比基础版,新增了计分和历史记录功能,用户可以在每次猜测后查看自己的得分和猜测历史。此功能展示了状态管理的进阶用法以及如何保存和显示历史数据。
66 31
「Mac畅玩鸿蒙与硬件38」UI互动应用篇15 - 猜数字增强版
|
6天前
「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色,用户可以在视觉上感受到按钮的闪烁效果,提升界面互动体验。
49 19
「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
|
7天前
「Mac畅玩鸿蒙与硬件42」UI互动应用篇19 - 数字键盘应用
本篇将带你实现一个数字键盘应用,支持用户通过点击数字键输入数字并实时更新显示内容。我们将展示如何使用按钮组件和状态管理来实现一个简洁且实用的数字键盘。
47 17
「Mac畅玩鸿蒙与硬件42」UI互动应用篇19 - 数字键盘应用
|
14天前
|
UED 开发者
「Mac畅玩鸿蒙与硬件36」UI互动应用篇13 - 数字滚动抽奖器
本篇将带你实现一个简单的数字滚动抽奖器。用户点击按钮后,屏幕上的数字会以滚动动画的形式随机变动,最终显示一个抽奖数字。这个项目展示了如何结合定时器、状态管理和动画实现一个有趣的互动应用。
66 23
「Mac畅玩鸿蒙与硬件36」UI互动应用篇13 - 数字滚动抽奖器
|
10天前
|
前端开发 UED
「Mac畅玩鸿蒙与硬件39」UI互动应用篇16 - 倒计时环形进度条
本篇将带你实现一个倒计时环形进度条应用。用户可以设置倒计时的时间,启动倒计时后,应用会动态显示一个随着时间递减的环形进度条,同时伴有数字倒计时显示。这是结合动画效果和时间管理的实用示例。
94 10
「Mac畅玩鸿蒙与硬件39」UI互动应用篇16 - 倒计时环形进度条
|
15天前
「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历
本篇将带你实现一个简易日历应用,显示当前月份的日期,并支持选择特定日期的功能。用户可以通过点击日期高亮选中,还可以切换上下月份,体验动态界面的交互效果。
42 12
「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历