基本语法
缩进:用缩进来表示代码块,通常用4个空格
注释:单行注释用#,多行注释用'''或"""
语句结束:通常每行一条语句,也可用分号分隔,但不推荐
变量和数据类型
变量:无需声明类型,直接赋值
常见数据类型:
数字:整数(int)、浮点数(float)、复数(complex)
字符串(str):用单引号、双引号或三引号
布尔型(bool):True和False
空值(None)
类型转换:int(), float(), str(), bool()等
运算符
算术运算符:+, -, *, /, //(整除), %(取余), **(幂)
比较运算符:==, !=, >, <, >=, <=
逻辑运算符:and, or, not
赋值运算符:=, +=, -=等
身份运算符:is, is not
成员运算符:in, not in
数据结构
列表(list):有序,可变,用[]定义
元组(tuple):有序,不可变,用()定义
集合(set):无序,不重复,用{}或set()定义
字典(dict):键值对,无序,用{key: value}定义
流程控制
条件语句:if, elif, else
循环语句:
for循环:遍历序列(如列表、字符串)或可迭代对象
while循环:在条件为真时重复执行
循环控制:break(终止循环)、continue(跳过本次循环)
函数
定义:使用def关键字
参数:位置参数、默认参数、可变参数(*args)、关键字参数(**kwargs)
返回值:用return返回,可以返回多个值(实际上是一个元组)
作用域:局部变量和全局变量,使用global声明全局变量
匿名函数:lambda函数
模块和包
模块:一个.py文件,包含Python代码
导入模块:import module,from module import something
包:包含多个模块的目录,必须有__init__.py文件
常用标准库:os, sys, math, datetime, random, json等
文件操作
打开文件:open(file, mode),模式有r(读)、w(写)、a(追加)等
读取文件:read(), readline(), readlines()
写入文件:write(), writelines()
关闭文件:close(),推荐使用with语句自动关闭
异常处理
使用try-except块捕获异常
可以指定异常类型,或用Exception捕获所有异常
可选的else(没有异常时执行)和finally(无论是否异常都执行)
面向对象编程(OOP)
类(class):用class定义,类名通常首字母大写
属性:实例属性、类属性
方法:实例方法(第一个参数为self)、类方法(用@classmethod装饰,第一个参数为cls)、静态方法(用@staticmethod装饰,无特殊参数)
继承:子类继承父类,可以重写方法
多态:不同类的对象对同一消息做出响应
封装:将数据和方法包装在类中
常用内置函数
输入输出:input(), print()
数学:abs(), round(), min(), max(), sum()
迭代:range(), enumerate(), zip()
类型判断:type(), isinstance()
其他:len(), sorted(), reversed()等
列表推导式、字典推导式、集合推导式
快速生成数据结构的简洁语法
例如:[x**2 for x in range(10) if x%2==0]
迭代器和生成器
迭代器:实现了__iter__()和__next__()方法的对象
生成器:使用yield语句的函数,返回生成器对象,可以迭代
装饰器
用于修改或增强函数的功能,使用@语法
上下文管理器
用于管理资源,如文件打开关闭,使用with语句
常用标准库和第三方库
标准库:sys, os, re, math, datetime, json, csv, urllib等
第三方库:requests, numpy, pandas, matplotlib, django等(需安装)
虚拟环境
创建独立的Python环境,用于管理项目依赖
代码规范
PEP 8:Python代码风格指南
调试和测试
调试:使用print、logging、pdb等
测试:unittest、pytest等测试框架
以上是Python基础的主要知识点,每个知识点都可以展开很多内容
Python基础全面总结
- Python
解释型语言
变量类型在运行时确定
支持面向对象编程范式
语法简洁
- 基本语法
2.1 注释
单行注释
"""
多行注释(文档字符串)
可以写多行
"""
'''
这也是多行注释
'''
2.2 变量和命名规则
变量命名规则
变量名 = 值 # 使用字母、数字、下划线,不能以数字开头
my_variable = 10
myVariable = 20 # 驼峰命名法
MY_CONSTANT = 30 # 常量(约定大写)
2.3 关键字
Python的关键字
import keyword
print(keyword.kwlist)
'False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'
- 数据类型
3.1 基本数据类型
数值类型
整数 = 10 int
浮点数 = 3.14 float
复数 = 1 + 2j complex
布尔类型
真 = True bool (首字母大写)
假 = False
字符串
字符串 = "Hello" str
字符串2 = 'World'
多行字符串 = """多行
字符串"""
空值
空值 = None NoneType
3.2 复合数据类型
列表(有序,可变)
列表 = [1, 2, 3, "hello", True]
元组(有序,不可变)
元组 = (1, 2, 3, "world")
字典(键值对,无序,键不可变)
字典 = {"name": "张三", "age": 20}
集合(无序,元素唯一)
集合 = {1, 2, 3, 3} # {1, 2, 3}
冻结集合 = frozenset([1, 2, 3])
- 运算符
4.1 算术运算符
- 加
- 减
- 乘
/ 除法(返回浮点数)
// 整除
% 取余
** 幂运算
4.2 比较运算符
== 等于
!= 不等于
大于
< 小于
= 大于等于
<= 小于等于
4.3 逻辑运算符
and 与
or 或
not 非
4.4 赋值运算符
= 赋值
+= 加等于
-= 减等于
*= 乘等于
/= 除等于
//= 整除等于
%= 取余等于
**= 幂等于
4.5 位运算符
& 按位与
| 按位或
^ 按位异或
~ 按位取反
<< 左移
右移
4.6 成员运算符
in 在序列中
not in 不在序列中
4.7 身份运算符
is 是同一个对象
is not 不是同一个对象
- 流程控制
5.1 条件语句
if语句
if 条件1:
代码块1
elif 条件2:
代码块2
else:
代码块3
示例
age = 18
if age < 18:
print("未成年")
elif age >= 18 and age < 60:
print("成年")
else:
print("老年")
三元表达式
结果 = 值1 if 条件 else 值2
5.2 循环语句
while循环
while 条件:
代码块
if 退出条件:
break # 跳出循环
if 跳过条件:
continue # 跳过本次循环
for循环
for 变量 in 序列:
代码块
range()函数
for i in range(5): # 0到4
print(i)
for i in range(2, 10): # 2到9
print(i)
for i in range(0, 10, 2): # 0到9,步长为2
print(i)
5.3 循环控制
break: 完全结束循环
continue: 跳过本次循环
else: 循环正常结束执行(没有被break中断)
for i in range(5):
if i == 3:
break
print(i)
else:
print("循环正常结束")
- 数据结构操作
6.1 字符串操作
s = "Hello World"
索引和切片
print(s[0]) # H
print(s[-1]) # d
print(s[0:5]) # Hello
print(s[6:]) # World
print(s[::-1]) # dlroW olleH(反转)
常用方法
s.upper() # 转大写
s.lower() # 转小写
s.strip() # 去除两边空白
s.split() # 分割字符串
s.join(list) # 连接字符串
s.replace(old, new) # 替换
s.find(sub) # 查找子串
6.2 列表操作
my_list = [1, 2, 3, 4, 5]
增删改查
my_list.append(6) # 末尾添加
my_list.insert(0, 0) # 指定位置插入
my_list.extend([7, 8]) # 扩展列表
my_list.remove(3) # 删除元素
del my_list[0] # 删除索引位置元素
value = my_list.pop() # 弹出最后一个元素
value = my_list.pop(1) # 弹出指定位置元素
其他操作
my_list.sort() # 排序(原地)
sorted_list = sorted(my_list) # 返回新列表
my_list.reverse() # 反转
len(my_list) # 长度
6.3 字典操作
my_dict = {"name": "Tom", "age": 25}
增删改查
my_dict["gender"] = "male" # 添加/修改
del my_dict["age"] # 删除键
value = my_dict.get("name") # 获取值(键不存在返回None)
value = my_dict.get("key", "default") # 设置默认值
遍历
for key in my_dict: # 遍历键
print(key)
for value in my_dict.values(): # 遍历值
print(value)
for key, value in my_dict.items(): # 遍历键值对
print(key, value)
6.4 集合操作
set1 = {1, 2, 3}
set2 = {3, 4, 5}
集合运算
set1 | set2 # 并集 {1, 2, 3, 4, 5}
set1 & set2 # 交集 {3}
set1 - set2 # 差集 {1, 2}
set1 ^ set2 # 对称差集 {1, 2, 4, 5}
- 函数
7.1 函数定义
def 函数名(参数1, 参数2=默认值):
"""函数文档字符串"""
代码块
return 返回值
示例
def greet(name, greeting="Hello"):
"""向某人问好"""
return f"{greeting}, {name}!"
result = greet("Alice") # Hello, Alice!
result2 = greet("Bob", "Hi") # Hi, Bob!
7.2 参数类型
位置参数
def func(a, b):
return a + b
默认参数
def func(a, b=10):
return a + b
可变位置参数 (*args)
def func(*args):
return sum(args)
可变关键字参数 (**kwargs)
def func(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
混合使用
def func(a, b=10, *args, **kwargs):
pass
7.3 作用域
局部变量 vs 全局变量
global_var = 10
def my_func():
local_var = 20 # 局部变量
global global_var # 声明使用全局变量
global_var = 30 # 修改全局变量
nonlocal关键字
def outer():
x = 10
def inner():
nonlocal x # 声明使用外层函数的变量
x = 20
inner()
print(x) # 20
7.4 匿名函数
lambda表达式
add = lambda x, y: x + y
result = add(3, 5) # 8
常用于高阶函数
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16, 25]
even = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
- 面向对象编程
8.1 类和对象
class Person:
类属性
species = "人类"
# 构造方法
def __init__(self, name, age):
# 实例属性
self.name = name
self.age = age
# 实例方法
def introduce(self):
return f"我叫{self.name},今年{self.age}岁"
# 类方法
@classmethod
def get_species(cls):
return cls.species
# 静态方法
@staticmethod
def is_adult(age):
return age >= 18
创建对象
p = Person("张三", 20)
print(p.introduce())
print(Person.get_species())
print(Person.is_adult(20))
8.2 继承
class Animal:
def init (self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def init (self, name, breed):
super().init (name) # 调用父类构造方法
self.breed = breed
def speak(self): # 方法重写
return "汪汪!"
多态
def animal_sound(animal):
print(animal.speak())
dog = Dog("旺财", "金毛")
animal_sound(dog) # 汪汪!
8.3 特殊方法(魔术方法)
class MyClass:
def init (self, value):
self.value = value
def __str__(self): # 字符串表示
return f"MyClass({self.value})"
def __repr__(self): # 解释器表示
return f"MyClass({self.value})"
def __len__(self):
return len(self.value)
def __add__(self, other):
return MyClass(self.value + other.value)
def __eq__(self, other):
return self.value == other.value
- 模块和包
9.1 导入模块
导入整个模块
import math
print(math.pi)
导入特定函数
from math import sqrt, pow
print(sqrt(16))
导入并重命名
import numpy as np
from math import sqrt as 平方根
导入所有(不推荐)
from math import *
9.2 创建模块和包
text
项目结构
my_package/
init .py # 包初始化文件
module1.py # 模块1
module2.py # 模块2
subpackage/ # 子包
init .py
- 异常处理
try:
可能出错的代码
result = 10 / 0
except ZeroDivisionError as e:
处理特定异常
print(f"除零错误: {e}")
except (TypeError, ValueError) as e:
处理多个异常
print(f"类型或值错误: {e}")
except Exception as e:
处理所有其他异常
print(f"未知错误: {e}")
else:
没有异常时执行
print("执行成功")
finally:
无论是否异常都执行
print("清理工作")
抛出异常
def divide(a, b):
if b == 0:
raise ValueError("除数不能为零")
return a / b
自定义异常
class MyError(Exception):
def init (self, message):
self.message = message
- 文件操作
打开文件
with open("file.txt", "r", encoding="utf-8") as f:
content = f.read() # 读取全部内容
content = f.readline() # 读取一行
lines = f.readlines() # 读取所有行(列表)
写入文件
with open("file.txt", "w", encoding="utf-8") as f:
f.write("Hello\n")
f.writelines(["Line1\n", "Line2\n"])
追加模式
with open("file.txt", "a", encoding="utf-8") as f:
f.write("追加内容\n")
二进制文件
with open("image.jpg", "rb") as f:
data = f.read()
- 常用内置函数
12.1 类型转换
int("10") # 10
float("3.14") # 3.14
str(100) # "100"
list((1,2,3)) # [1, 2, 3]
tuple([1,2,3]) # (1, 2, 3)
dict([("a",1), ("b",2)]) # {"a":1, "b":2}
set([1,2,2,3]) # {1, 2, 3}
bool(0) # False
12.2 数学运算
abs(-5) # 5
round(3.14159, 2) # 3.14
max(1, 2, 3) # 3
min(1, 2, 3) # 1
sum([1, 2, 3]) # 6
pow(2, 3) # 8
divmod(10, 3) # (3, 1) 商和余数
12.3 序列操作
len([1,2,3]) # 3
sorted([3,1,2]) # [1, 2, 3]
reversed([1,2,3]) # 反向迭代器
enumerate(["a","b"]) # 枚举:[(0,'a'), (1,'b')]
zip([1,2], ["a","b"]) # 打包:[(1,'a'), (2,'b')]
all([True, True, False]) # False
any([False, False, True]) # True
range(5) # range(0, 5)
12.4 输入输出
name = input("请输入姓名: ") # 获取输入
print("Hello", name) # 输出
print("Hello", name, sep=", ", end="!\n") # 自定义分隔符和结束符
格式化输出
name = "Alice"
age = 20
print(f"{name}今年{age}岁") # f-string(推荐)
print("{}今年{}岁".format(name, age)) # format方法
print("%s今年%d岁" % (name, age)) # %格式化
- 高级特性
13.1 列表推导式
基本形式
squares = [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
带条件
evens = [x for x in range(10) if x % 2 == 0]
[0, 2, 4, 6, 8]
多重循环
pairs = [(x, y) for x in range(3) for y in range(3)]
[(0,0), (0,1), (0,2), (1,0), ...]
字典推导式
square_dict = {x: x**2 for x in range(5)}
集合推导式
unique_lengths = {len(x) for x in ["apple", "banana", "cherry"]}
13.2 生成器
生成器表达式(惰性求值)
gen = (x**2 for x in range(10))
for val in gen:
print(val)
生成器函数
def fibonacci(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
for num in fibonacci(100):
print(num)
13.3 装饰器
def timer(func):
"""计时装饰器"""
def wrapper(args, **kwargs):
import time
start = time.time()
result = func( args, **kwargs)
end = time.time()
print(f"{func.name }执行时间: {end-start:.4f}秒")
return result
return wrapper
@timer
def slow_function():
import time
time.sleep(1)
return "完成"
带参数的装饰器
def repeat(n):
def decorator(func):
def wrapper(args, **kwargs):
for _ in range(n):
result = func( args, **kwargs)
return result
return wrapper
return decorator
@repeat(3)
def say_hello():
print("Hello!")
13.4 上下文管理器
使用with语句
with open("file.txt", "r") as f:
content = f.read()
自定义上下文管理器
class MyContextManager:
def enter (self):
print("进入上下文")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("退出上下文")
if exc_type:
print(f"异常类型: {exc_type}")
return True # 抑制异常
with MyContextManager() as cm:
print("在上下文中执行")
raise ValueError("测试异常")
- 标准库常用模块
14.1 os模块(操作系统接口)
import os
os.getcwd() # 当前工作目录
os.listdir('.') # 列出目录内容
os.mkdir('new_dir') # 创建目录
os.path.exists('file.txt') # 检查路径是否存在
os.path.join('dir', 'file.txt') # 路径拼接
14.2 sys模块(系统参数)
import sys
sys.argv # 命令行参数
sys.path # Python搜索路径
sys.exit(0) # 退出程序
sys.version # Python版本
14.3 datetime模块(日期时间)
from datetime import datetime, date, timedelta
now = datetime.now() # 当前时间
today = date.today() # 今天日期
formatted = now.strftime("%Y-%m-%d %H:%M:%S") # 格式化
tomorrow = today + timedelta(days=1) # 明天
14.4 json模块(JSON处理)
import json
data = {"name": "Alice", "age": 20}
json_str = json.dumps(data) # 字典转JSON字符串
data2 = json.loads(json_str) # JSON字符串转字典
文件操作
with open("data.json", "w") as f:
json.dump(data, f) # 写入JSON文件
with open("data.json", "r") as f:
data3 = json.load(f) # 读取JSON文件
14.5 re模块(正则表达式)
import re
pattern = r'\d+' # 匹配数字
text = "abc123def456"
result = re.findall(pattern, text) # ['123', '456']
匹配对象
match = re.search(r'(\d+)-(\d+)', '电话: 010-12345678')
if match:
print(match.group()) # 010-12345678
print(match.group(1)) # 010
print(match.group(2)) # 12345678
- Pythonic编程技巧
15.1 交换变量
a, b = 1, 2
a, b = b, a # a=2, b=1
15.2 链式比较
x = 5
if 0 < x < 10:
print("x在0和10之间")
15.3 序列解包
列表解包 first, *middle, last = [1, 2, 3, 4, 5] first=1, middle=[2,3,4], last=5
字典解包 dict1 = {"a": 1, "b": 2} dict2 = {"c": 3, **dict1} {"c":3, "a":1, "b":2}
15.4 条件表达式
传统写法 if score >= 60: result = "及格" else: result = "不及格"
Pythonic写法 result = "及格" if score >= 60 else "不及格"
15.5 遍历索引和值
传统写法 for i in range(len(items)): print(i, items[i])
Pythonic写法 for i, item in enumerate(items): print(i, item)
15.6 遍历字典
同时获取键和值 for key, value in my_dict.items(): print(key, value)
- 最佳实践
16.1 代码规范(PEP 8)
缩进:4个空格
行长度:不超过79字符
空行:函数间2行,类方法间1行
导入:按标准库、第三方库、本地库分组
命名:
变量/函数:snake_case
类:CamelCase
常量:UPPER_CASE
16.2 文档字符串
def calculate_sum(a, b):
计算两个数的和
参数:
a -- 第一个数
b -- 第二个数
返回:
两个数的和
return a + b
16.3 异常处理原则
只捕获你能处理的异常
使用具体的异常类型
不要过度使用try-except
记录异常信息