Python 语法速通
# 注释
# 单行注释
"""多行字符串 / 文档注释"""
# 变量与基础类型
name = "Alice" # str
age = 18 # int
price = 9.99 # float
enabled = True # bool
nothing = None # 空值
# 查看类型、转换
type(age) # <class 'int'>
int("12") # 12
str(12) # "12"
list("abc") # ["a", "b", "c"]
# 容器
numbers = [1, 2, 3] # list:可修改、有序
point = (10, 20) # tuple:不可修改、有序
tags = {"python", "django"} # set:去重、无序
user = {"name": "Alice", "age": 18} # dict:键值对
numbers.append(4)
numbers[0] # 1
numbers[-1] # 4
numbers[1:3] # [2, 3]
user["name"] # "Alice"
user.get("email") # None,不会因键不存在报错
user["city"] = "Shanghai"
# 条件判断:缩进代表代码块
if age >= 18:
print("adult")
elif age >= 12:
print("teen")
else:
print("child")
# 逻辑运算
if enabled and age > 0:
pass
if not enabled:
pass
# 循环
for number in numbers:
print(number)
for index, value in enumerate(numbers):
print(index, value)
for key, value in user.items():
print(key, value)
for index in range(3): # 0, 1, 2
print(index)
while age < 20:
age += 1
# continue 跳过本轮;break 结束循环
# 列表 / 字典推导式
squares = [number ** 2 for number in range(10)]
evens = [number for number in range(10) if number % 2 == 0]
name_lengths = {name: len(name) for name in ["Tom", "Alice"]}
# 函数
def add(left, right=0):
"""返回两个数之和。"""
return left + right
result = add(1, 2)
result = add(right=2, left=1)
# 任意位置参数、关键字参数
def show(*args, **kwargs):
print(args) # tuple
print(kwargs) # dict
# 异常处理
try:
value = int("abc")
except ValueError as error:
print(f"转换失败:{error}")
else:
print("未发生异常")
finally:
print("始终执行")
# 文件操作:with 自动关闭文件
with open("data.txt", "r", encoding="utf-8") as file:
content = file.read()
with open("data.txt", "w", encoding="utf-8") as file:
file.write("hello\n")
类与对象
class User:
# 类属性:所有实例共享(通常用于常量)
role = "member"
# 构造方法:创建实例时调用;不是必须
def __init__(self, name, age=0):
self.name = name # 实例属性
self.age = age
# 实例方法,第一个参数是 self
def greet(self):
return f"Hi, I'm {self.name}"
# 类方法,可访问类本身
@classmethod
def guest(cls):
return cls("Guest")
# 静态方法,与类/实例状态都无关
@staticmethod
def is_adult(age):
return age >= 18
user = User("Alice", 18)
user.greet()
# 继承与 super()
class Admin(User):
def __init__(self, name, age, permissions):
super().__init__(name, age) # 调用父类构造方法
self.permissions = permissions
def greet(self):
return f"Admin: {super().greet()}"
常见 Python 特性
# 解包
first, second = [1, 2]
first, *middle, last = [1, 2, 3, 4]
# f-string:推荐字符串格式化
message = f"{name} is {age} years old"
# 三元表达式
status = "adult" if age >= 18 else "minor"
# 空值默认处理
display_name = name or "Anonymous"
# 成员判断
"python" in tags
"name" in user
# 相等与身份
1 == 1 # 值相等
value is None # 判断 None 时用 is
模块与包
import os
from datetime import datetime
from pathlib import Path as FilePath
print(datetime.now())
运行入口:
def main():
print("start")
if __name__ == "__main__":
main()
DRF 关联重点
class MyViewSet(ReadOnlyViewSet):
queryset = Model.objects.all() # 类属性
serializer_class = MySerializer # 类属性
def list(self, request, *args, **kwargs):
response = super().list(request, *args, **kwargs)
return response
def定义函数或方法。self代表当前实例。__init__不是必写;仅在需要初始化实例状态时定义。- 类方法中调用父类实现,现代 Python 推荐
super()。