Python基础开发
本文提供Python编程入门指南,涵盖基础语法到高级应用。主要内容包括:环境搭建(Python安装、IDE选择)、基础语法(变量、数据类型、流程控制)、常用数据结构(字符串、列表、字典)、函数与模块、文件操作与异常处理。进阶部分介绍面向对象编程、装饰器与生成器、网络编程(socket/requests/aiohttp)、异步编程(asyncio)、Web开发和单元测试等。文章还包含代码风格规范、虚
一、环境搭建
-
安装Python
- 推荐去 Python官网 下载最新版。
- 安装后可在命令行输入
python --version
检查是否安装成功。
-
IDE推荐
二、语法基础
-
Hello World
print("Hello, world!")
-
变量和数据类型
name = "Alice" # 字符串 age = 18 # 整数 height = 1.75 # 浮点数 is_student = True # 布尔值
-
注释
# 这是单行注释 """ 这是多行注释 """
三、常用数据类型
-
字符串
s = "Hello" print(s.upper()) # 转大写
-
列表
lst = [1, 2, 3] lst.append(4) print(lst)
-
元组
tup = (1, 2, 3) print(tup[0])
-
字典
d = {"name": "Tom", "age": 20} print(d["name"])
四、流程控制
-
条件语句
if age > 18: print("成年人") elif age == 18: print("刚成年") else: print("未成年")
-
循环语句
for i in range(5): print(i) while age < 20: age += 1 print(age)
五、函数定义
def greet(name):
print("Hello,", name)
greet("Bob")
六、模块和包
-
导入模块
import math print(math.sqrt(16))
-
自定义模块
新建一个my_module.py
文件:def say_hi(): print("Hi!")
在主程序中导入:
import my_module my_module.say_hi()
七、文件操作
with open("test.txt", "w") as f:
f.write("Hello, file!")
八、异常处理
try:
x = 1 / 0
except ZeroDivisionError:
print("不能除以0")
finally:
print("结束")
九、常用第三方库
requests
:HTTP请求numpy
:科学计算pandas
:数据分析matplotlib
:绘图
安装方法(命令行):
pip install requests numpy pandas matplotlib
十、面向对象编程(OOP)
Python是一门支持面向对象的语言,掌握OOP能让你的代码更易扩展和维护。
类与对象示例:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} makes a sound.")
class Dog(Animal):
def speak(self):
print(f"{self.name} says woof!")
dog = Dog("Buddy")
dog.speak() # 输出:Buddy says woof!
十一、装饰器与生成器
装饰器可以对函数进行增强,常用于日志、权限控制等场景。
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before function")
result = func(*args, **kwargs)
print("After function")
return result
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
生成器可以实现惰性计算,节省内存。
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for num in fibonacci(10):
print(num)
十二、文件与数据处理
-
处理CSV文件
import csv with open('data.csv', newline='') as f: reader = csv.reader(f) for row in reader: print(row)
-
JSON数据读写
import json data = {'name': 'Tom', 'age': 20} with open('data.json', 'w') as f: json.dump(data, f)
十三、异常和日志管理
-
自定义异常
class MyError(Exception): pass try: raise MyError("Something went wrong!") except MyError as e: print(e)
-
日志记录
import logging logging.basicConfig(level=logging.INFO) logging.info("This is an info message.")
十四、常用标准库与第三方库
- 标准库: os、sys、datetime、collections、re(正则表达式)
- 第三方库: requests(网络)、pandas(数据分析)、matplotlib(可视化)、flask/django(Web开发)
举例:网络请求
import requests
response = requests.get('https://api.github.com')
print(response.status_code)
print(response.json())
十五、单元测试
编写测试用例保证代码质量。
import unittest
def add(a, b):
return a + b
class TestAdd(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 3), 5)
if __name__ == '__main__':
unittest.main()
十六、包管理与虚拟环境
-
虚拟环境
python -m venv venv source venv/bin/activate # Linux/macOS venv\Scripts\activate # Windows
-
依赖管理
使用requirements.txt
文件pip freeze > requirements.txt pip install -r requirements.txt
十七、并发与异步编程
-
多线程、多进程
import threading def worker(): print("Worker") t = threading.Thread(target=worker) t.start() t.join()
-
异步编程
import asyncio async def main(): print("Hello") await asyncio.sleep(1) print("World") asyncio.run(main())
十八、Web开发与自动化
-
Web开发
Flask、Django等框架from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, Flask!" if __name__ == '__main__': app.run()
-
自动化脚本
Selenium、PyAutoGUI等库
十九、代码风格与最佳实践
- 遵循 PEP8 代码规范
- 合理命名、模块化、注释
- 使用类型注解(Type Hint)
def add(a: int, b: int) -> int:
return a + b
二十. 网络编程基础
网络编程的核心是“数据在网络上传输”,主要涉及客户端和服务器两端的通信。Python标准库 socket
提供了底层网络通信的能力,第三方库如 requests
、aiohttp
提供了更高级的HTTP操作。
二十一. socket模块基础
21.1 什么是socket?
socket是“套接字”,是网络通信的端点。通过socket可以实现TCP、UDP等协议的数据收发。
21.2 TCP通信示例
服务端代码(server.py)
import socket
# 创建socket对象,指定协议类型
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8888)) # 绑定地址和端口
server.listen(1) # 开始监听
print("服务器启动,等待连接...")
conn, addr = server.accept() # 等待客户端连接
print(f"连接来自:{addr}")
data = conn.recv(1024) # 接收数据
print("收到数据:", data.decode())
conn.send(b'Hello, Client!') # 发送数据
conn.close()
server.close()
客户端代码(client.py)
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8888)) # 连接服务器
client.send(b'Hello, Server!') # 发送数据
data = client.recv(1024) # 接收数据
print("收到服务器回复:", data.decode())
client.close()
21.3 UDP通信示例
服务端
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 9999))
print("UDP服务器已启动")
while True:
data, addr = server.recvfrom(1024)
print(f"收到来自{addr}的数据:{data.decode()}")
server.sendto(b'Hello UDP Client!', addr)
客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b'Hello UDP Server!', ('127.0.0.1', 9999))
data, addr = client.recvfrom(1024)
print("收到服务器回复:", data.decode())
二十二. requests库进行HTTP通信
requests
是最常用的HTTP客户端库,适合爬虫、API调用等场景。
22.1 GET请求
import requests
response = requests.get('https://api.github.com')
print(response.status_code)
print(response.text)
22.2 POST请求
import requests
data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
22.3 文件下载
import requests
url = 'https://www.example.com/image.jpg'
resp = requests.get(url)
with open('image.jpg', 'wb') as f:
f.write(resp.content)
二十三. 简单多线程服务器
服务端可以用多线程同时处理多个客户端连接。
import socket
import threading
def handle_client(conn, addr):
print(f"连接来自:{addr}")
conn.send(b'Hello from server!')
conn.close()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8080))
server.listen(5)
print("多线程服务器启动...")
while True:
conn, addr = server.accept()
t = threading.Thread(target=handle_client, args=(conn, addr))
t.start()
二十四. 网络异常处理
网络编程常见异常如超时、连接失败等,要用try-except捕获:
import socket
try:
client = socket.socket()
client.connect(('127.0.0.1', 12345))
except socket.error as e:
print("连接失败:", e)
二十五. 什么是异步网络编程?
传统的网络通信通常是同步阻塞的:比如发送请求后必须等到响应才能继续执行后续代码。异步编程则允许在等待网络响应时,CPU去处理其他任务,实现高并发、提升资源利用率,尤其适合I/O密集型(如网络、磁盘操作)场景。
二十六. Python异步编程核心:asyncio
Python 3.4+ 标准库引入了 asyncio
,它支持协程(coroutine)、事件循环(event loop)等异步机制。
协程是可以暂停和恢复执行的函数,async
定义,await
用于挂起等待。
26.1 基本语法
import asyncio
async def hello():
print("Hello ...")
await asyncio.sleep(1) # 模拟I/O等待
print("... World!")
# 启动事件循环
asyncio.run(hello())
26.2 并发执行多个协程
import asyncio
async def task(name, delay):
print(f"Task {name} start")
await asyncio.sleep(delay)
print(f"Task {name} end")
async def main():
await asyncio.gather(
task('A', 2),
task('B', 1),
task('C', 3)
)
asyncio.run(main())
输出顺序会体现并发特性。
二十八. asyncio实现异步网络通信
28.1 异步TCP服务器
import asyncio
async def handle_client(reader, writer):
addr = writer.get_extra_info('peername')
print(f"连接来自:{addr}")
data = await reader.read(100)
message = data.decode()
print(f"收到:{message}")
writer.write(b"Hello, Client!")
await writer.drain()
writer.close()
async def main():
server = await asyncio.start_server(handle_client, '127.0.0.1', 8888)
async with server:
await server.serve_forever()
asyncio.run(main())
18.2 异步TCP客户端
import asyncio
async def tcp_client():
reader, writer = await asyncio.open_connection('127.0.0.1', 8888)
writer.write(b'Hello, Server!')
await writer.drain()
data = await reader.read(100)
print(f"收到服务器回复:{data.decode()}")
writer.close()
asyncio.run(tcp_client())
二十九. aiohttp:异步HTTP客户端与服务器
aiohttp
是基于 asyncio 的异步HTTP库,适合高并发爬虫、API调用、Web服务等。
29.1 aiohttp异步HTTP客户端
import aiohttp
import asyncio
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
text = await resp.text()
print(f"响应长度:{len(text)}")
asyncio.run(fetch('https://www.example.com'))
29.2 aiohttp异步HTTP服务器
from aiohttp import web
async def handle(request):
return web.Response(text="Hello, aiohttp!")
app = web.Application()
app.add_routes([web.get('/', handle)])
if __name__ == '__main__':
web.run_app(app, port=8080)
三十. 实际应用场景
- 高并发爬虫:同时抓取成百上千网页
- 即时聊天/推送服务:如IM、WebSocket
- 高性能API服务器:处理大量并发请求
- 实时数据采集:如物联网设备数据上传
三十一. 注意事项与进阶
- 异步编程适合I/O密集型,不适合CPU密集型(如大规模运算)。
- 第三方库需支持异步(如数据库驱动、HTTP库等)。
- 常用asyncio工具:
asyncio.gather
、asyncio.create_task
、asyncio.wait
。 - 异常处理:协程内部建议使用try-except捕获异常。
三十二. 综合案例:异步并发爬取网页
import aiohttp
import asyncio
urls = [
'https://www.example.com',
'https://www.python.org',
'https://www.openai.com',
# 其他网址
]
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
print(f"{url}: {resp.status}")
async def main():
tasks = [fetch(url) for url in urls]
await asyncio.gather(*tasks)
asyncio.run(main())
上述代码会并发请求所有网址,大大提升效率。
创作不易,点点关注!
更多推荐
所有评论(0)