Python 基础教程(十):10. 高级主题

本章介绍 Python 编程中的一些进阶主题,涵盖生成器、装饰器、上下文管理器、多线程和多进程、网络编程、数据库操作等。掌握这些内容将帮助你构建更高效、模块化、可扩展的应用程序。


10.1 生成器和迭代器

10.1.1 迭代器(Iterator)

迭代器是实现了 __iter__() 和 __next__() 方法的对象,可用于遍历序列。

my_list = [1, 2, 3]

iterator = iter(my_list)

print(next(iterator))  # 输出 1

print(next(iterator))  # 输出 2

10.1.2 生成器(Generator)

生成器是一种用于创建迭代器的简单方式,使用 yield 关键字返回结果。

def countdown(n):

    while n > 0:

        yield n

        n -= 1



for num in countdown(3):

    print(num)  # 输出 3, 2, 1

生成器具有惰性计算的特性,适合处理大量数据或流式数据。


10.2 装饰器

装饰器是一个函数,用于在不修改原函数代码的情况下,增强或改变其行为。

def logger(func):

    def wrapper(*args, **kwargs):

        print(f"调用函数 {func.__name__}")

        return func(*args, **kwargs)

    return wrapper



@logger

def greet(name):

    print(f"Hello, {name}")



greet("Alice")

常见用途包括:日志记录、权限检查、性能计时等。


10.3 上下文管理器

上下文管理器用于资源管理,如文件、网络连接等,常用 with 语句自动处理资源释放。

with open("example.txt", "r") as file:

    content = file.read()

等价于:

file = open("example.txt", "r")

try:

    content = file.read()

finally:

    file.close()

自定义上下文管理器

class MyContext:

    def __enter__(self):

        print("进入上下文")

        return self



    def __exit__(self, exc_type, exc_val, exc_tb):

        print("退出上下文")



with MyContext():

    print("处理中")

10.4 多线程和多进程

10.4.1 多线程(threading)

适合 I/O 密集型任务:

import threading



def worker():

    print("线程工作中")



t = threading.Thread(target=worker)

t.start()

t.join()

注意:Python 解释器的 GIL(全局解释器锁) 限制了多线程的 CPU 并行性。

10.4.2 多进程(multiprocessing)

适合 CPU 密集型任务:

from multiprocessing import Process



def worker():

    print("进程工作中")



p = Process(target=worker)

p.start()

p.join()

每个进程有独立的内存空间,适合并行计算任务。


10.5 网络编程基础

10.5.1 使用 socket 编程

TCP 服务端:

import socket



server = socket.socket()

server.bind(('localhost', 12345))

server.listen(1)



conn, addr = server.accept()

print("连接来自:", addr)

data = conn.recv(1024)

conn.sendall(b"Hello Client")

conn.close()

TCP 客户端:

client = socket.socket()

client.connect(('localhost', 12345))

client.sendall(b"Hello Server")

data = client.recv(1024)

print("收到:", data.decode())

client.close()

10.5.2 使用 requests 库进行 HTTP 编程(常用于 Web 接口调用)

用途: 调用 Web API、模拟浏览器请求。

import requests



response = requests.get('https://api.github.com')

print(response.status_code)

print(response.json())

 特点:

  • 高层封装、简单易用
  • 支持 GET/POST/PUT/DELETE 等方法
  • 支持 cookie、headers、参数、文件上传等

10.5.3 Web 服务开发(Flask / Django)

用途: 开发 Web API 或网站后端服务。

Flask 简例:

from flask import Flask, jsonify



app = Flask(__name__)



@app.route('/hello')

def hello():

    return jsonify({'msg': 'Hello, World!'})



if __name__ == '__main__':

    app.run(debug=True)

特点:

  • 快速构建 RESTful 接口
  • 与前端(如 HTML 页面、移动端、Vue/React)通信

10.5.4 异步网络编程(asyncio / aiohttp)

用途: 高并发 HTTP 服务或客户端通信。

import asyncio

import aiohttp



async def fetch():

    async with aiohttp.ClientSession() as session:

        async with session.get('https://httpbin.org/get') as resp:

            print(await resp.text())



asyncio.run(fetch())

特点:

  • 非阻塞、适合 I/O 密集型任务
  • 常用于爬虫、实时聊天、数据采集

10.5.5 网络爬虫(如 Scrapy)

用途: 抓取网页信息并解析内容。

import requests

from bs4 import BeautifulSoup



res = requests.get('https://example.com')

soup = BeautifulSoup(res.text, 'html.parser')

print(soup.title.text)

常见工具:

  • requests + BeautifulSoup
  • Scrapy 框架(支持异步、分布式爬虫)

10.5.6 WebSocket 编程(双向通信)

用途: 实时通信,如在线聊天室、股票行情推送。

客户端示例(使用 websockets):

import asyncio

import websockets



async def hello():

    uri = "ws://localhost:8765"

    async with websockets.connect(uri) as websocket:

        await websocket.send("Hello server")

        response = await websocket.recv()

        print(response)



asyncio.run(hello())

10.5.7 FTP / 邮件(SMTP)协议编程

  • FTP 文件上传下载: 使用 ftplib
  • SMTP 发邮件: 使用 smtplib + email
import smtplib

from email.mime.text import MIMEText



msg = MIMEText("邮件正文内容")

msg['Subject'] = "主题"

msg['From'] = "sender@example.com"

msg['To'] = "receiver@example.com"



server = smtplib.SMTP('smtp.example.com', 587)

server.starttls()

server.login("user", "password")

server.send_message(msg)

server.quit()

10.5.8 第三方 SDK 封装的接口调用(如微信、钉钉、百度AI)

很多服务商提供 Python SDK,方便直接调用云服务接口。

以阿里云短信服务 Python SDK 为例:

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

# 初始化客户端
client = AcsClient(
    ak='你的AccessKeyId',
    secret='你的AccessKeySecret',
    region_id='cn-hangzhou'  # 根据你的服务区域设置
)

# 创建通用请求对象
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('dysmsapi.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')  # https | http
request.set_version('2017-05-25')
request.set_action_name('SendSms')

# 设置请求参数
request.add_query_param('RegionId', 'cn-hangzhou')
request.add_query_param('PhoneNumbers', '接收手机号')
request.add_query_param('SignName', '你的短信签名')
request.add_query_param('TemplateCode', '你的短信模板ID')
request.add_query_param('TemplateParam', '{"code":"123456"}')

# 发起请求
response = client.do_action_with_exception(request)
print(response.decode('utf-8'))

10.6 数据库操作

10.6.1 SQLite 示例

Python 自带 sqlite3 模块,适合轻量级本地数据库操作。

import sqlite3



conn = sqlite3.connect("example.db")

cursor = conn.cursor()



cursor.execute('''CREATE TABLE IF NOT EXISTS users (

    id INTEGER PRIMARY KEY AUTOINCREMENT,

    name TEXT,

    age INTEGER)''')



cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 30))

conn.commit()



cursor.execute("SELECT * FROM users")

print(cursor.fetchall())



conn.close()

10.6.2 使用 ORM(如 SQLAlchemy)

SQLAlchemy 提供更高级、对象化的数据库操作方式,推荐用于中大型项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值