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()