当前位置: 首页 > news >正文

Python入门第四课:高级特性与实战:应用列表推导式与生成器

列表推导式与生成器

1. 列表推导式(List Comprehensions)

# 传统方式创建平方列表
squares = []
for x in range(1, 11):squares.append(x**2)
print("传统方式:", squares)# 使用列表推导式
squares_lc = [x**2 for x in range(1, 11)]
print("列表推导式:", squares_lc)# 带条件的列表推导式
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print("偶数平方:", even_squares)# 嵌套推导式(矩阵转置)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print("转置矩阵:", transposed)

2. 生成器表达式(Generator Expressions)

# 创建生成器
square_gen = (x**2 for x in range(1, 11))# 使用生成器
print("生成器值:", end=" ")
for value in square_gen:print(value, end=" ")# 生成器优势:节省内存
import sys
print("\n内存占用比较:")
print("列表推导式:", sys.getsizeof([x**2 for x in range(1000000)]), "bytes")
print("生成器表达式:", sys.getsizeof((x**2 for x in range(1000000))), "bytes")

装饰器(Decorators)

1. 基本装饰器

def simple_decorator(func):def wrapper():print("--- 函数执行前 ---")func()print("--- 函数执行后 ---")return wrapper@simple_decorator
def greet():print("你好,世界!")# 调用被装饰的函数
greet()

2. 带参数的装饰器

def repeat(num_times):def decorator_repeat(func):def wrapper(*args, **kwargs):for _ in range(num_times):result = func(*args, **kwargs)return resultreturn wrapperreturn decorator_repeat@repeat(num_times=3)
def say_name(name):print(f"我的名字是 {name}")say_name("小明")

3. 计时装饰器(实用示例)

import timedef timer(func):def wrapper(*args, **kwargs):start_time = time.perf_counter()result = func(*args, **kwargs)end_time = time.perf_counter()print(f"函数 {func.__name__} 执行时间: {end_time - start_time:.4f} 秒")return resultreturn wrapper@timer
def long_running_function(n):total = 0for i in range(n):total += ireturn totalprint("计算结果:", long_running_function(1000000))

正则表达式(Regular Expressions)

1. 基本匹配

import retext = "联系我: 电话 138-1234-5678, 邮箱 example@email.com, 网址 https://www.example.com"# 查找电话号码
phone_pattern = r'\d{3}-\d{4}-\d{4}'
phones = re.findall(phone_pattern, text)
print("找到的电话号码:", phones)# 查找邮箱
email_pattern = r'[\w\.-]+@[\w\.-]+'
emails = re.findall(email_pattern, text)
print("找到的邮箱:", emails)# 查找URL
url_pattern = r'https?://\S+'
urls = re.findall(url_pattern, text)
print("找到的URL:", urls)

2. 验证输入格式

def validate_email(email):pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'return bool(re.match(pattern, email))# 测试邮箱验证
emails = ["test@example.com", "invalid_email", "name@domain.org", "wrong@format."]
for email in emails:print(f"{email}: {'有效' if validate_email(email) else '无效'}")

虚拟环境与包管理

1. 创建和使用虚拟环境

# 创建虚拟环境
python -m venv myenv# 激活虚拟环境 (Windows)
myenv\Scripts\activate# 激活虚拟环境 (Mac/Linux)
source myenv/bin/activate

2. 使用pip管理包

# 安装包
pip install requests pandas matplotlib# 查看已安装包
pip list# 生成requirements.txt
pip freeze > requirements.txt# 从requirements.txt安装
pip install -r requirements.txt

项目实践:天气查询应用

import requests
import json
from datetime import datetimedef get_weather(city_name):"""获取城市天气信息"""api_key = "YOUR_API_KEY"  # 替换为你的API密钥base_url = "http://api.openweathermap.org/data/2.5/weather"params = {"q": city_name,"appid": api_key,"units": "metric","lang": "zh_cn"}try:response = requests.get(base_url, params=params)response.raise_for_status()  # 检查请求是否成功data = response.json()# 提取天气信息weather_info = {"城市": data["name"],"温度": data["main"]["temp"],"体感温度": data["main"]["feels_like"],"天气状况": data["weather"][0]["description"],"湿度": data["main"]["humidity"],"风速": data["wind"]["speed"],"日出": datetime.fromtimestamp(data["sys"]["sunrise"]).strftime("%H:%M"),"日落": datetime.fromtimestamp(data["sys"]["sunset"]).strftime("%H:%M")}return weather_infoexcept requests.exceptions.RequestException as e:print(f"网络错误: {e}")return Noneexcept (KeyError, json.JSONDecodeError):print("解析天气数据失败")return Nonedef display_weather(weather_data):"""显示天气信息"""if not weather_data:returnprint("\n===== 天气报告 =====")print(f"城市: {weather_data['城市']}")print(f"温度: {weather_data['温度']}°C (体感温度: {weather_data['体感温度']}°C)")print(f"天气: {weather_data['天气状况']}")print(f"湿度: {weather_data['湿度']}%")print(f"风速: {weather_data['风速']} m/s")print(f"日出: {weather_data['日出']}, 日落: {weather_data['日落']}")print("=" * 20)def main():"""主程序"""print("=== 天气查询系统 ===")while True:city = input("\n请输入城市名称 (或输入 'q' 退出): ")if city.lower() == 'q':print("感谢使用天气查询系统!")breakweather = get_weather(city)if weather:display_weather(weather)else:print("无法获取天气信息,请检查城市名称或稍后再试")if __name__ == "__main__":main()

Python学习路径图

练习任务

  1. 密码生成器:使用列表推导式生成随机密码(包含大小写字母、数字和符号)

  2. 日志装饰器:创建装饰器自动记录函数调用和参数

  3. 数据提取工具:编写正则表达式从文本中提取所有日期(格式:YYYY-MM-DD)

  4. API扩展:为天气应用添加天气预报功能(使用5天预报API)

  5. 包管理实践:创建虚拟环境,安装必要包,并生成requirements.txt

"代码不是写给机器执行的,而是写给人阅读的。" - Robert C. Martin

通过本课的学习,你已经掌握了Python的高级特性和实战应用技能!这些工具将大幅提升你的编程效率和代码质量。接下来可以探索Web开发、数据分析或人工智能等专业方向。💻🚀

http://www.dtcms.com/a/304964.html

相关文章:

  • Makefile 与 CMake 关系指南
  • 基于 xlsx-js-style 的 Excel 导出工具实现导出excel
  • JSON解析(day20)
  • 飞机大战小游戏
  • string
  • 如何进行项目复盘?核心要点分析
  • 从线下到线上:解析足浴按摩平台如何实现成本降低80%的技术方案
  • java基础面试题(5)
  • 高精度惯性导航IMU传感器价格供应商
  • 数据处理和统计分析——04 Pandas DataFrame
  • Python的‌魔法方法‌
  • Java学习第八十七部分——四次挥手
  • Java设计模式之《备忘录模式》
  • 80V降5V,输出电流4A,应用于车载充电器
  • 工厂方法模式 Factory Method Pattern
  • 监控场景视频质量异常修复:陌讯动态增强算法实战解析
  • 深入浅出设计模式——创建型模式之建造者模式 Builder
  • LangChain API 功能介绍和使用示例
  • 单卡10分钟部署MiniCPM4-0.5B:轻量级大模型本地运行指南
  • ESP8266 AT 固件
  • Linux信号量:进程同步与互斥的核心机制
  • 人形机器人指南(十四)集成
  • 248°视野里的温柔革命:当清洁成为治愈城市的艺术
  • Qt 移动应用界面设计原则
  • 智能Agent场景实战指南 Day 23 : Agent安全与隐私保护
  • C++异常捕获:为何推荐按引用(by reference)捕获?
  • 【LeetCode 热题 100】(二)双指针
  • 基于Java+SQLServer2017实现(Web)酒店客房管理系统
  • MongoDB系列教程-教程概述
  • 系统选择菜单(ubuntu grub)介绍