代码风格

模仿 go 的写法即可。

python 中有大量的模块,我们用下面方式导入:

语法形式含义特点 / 风险记忆示例
import 模块名导入整个模块使用时需 模块名.对象,不易冲突import math; math.sqrt(4)
import 模块名 as 别名导入模块并起别名名字更短;便于更换实现import numpy as np
from 模块名 import 名称只导入指定对象直接用对象名,易与本地变量同名from math import sqrt
from 模块名 import *导入模块中“公开的全部名称”极易命名冲突,通常不推荐from os import *

包是一个目录(文件夹),里面包含多个模块文件,用于组织命名空间。我们用下面方式导入:

语法含义示例
import 包名.模块名导入包中某个模块import mypkg.utils
from 包名 import 模块名从包中导入模块对象from mypkg import utils

在 python 中为了防止被导入时执行脚本逻辑,一般用下面代码控制入口:

# 当文件被当脚本运行时:`__name__ == "__main__"`;当文件被当模块导入时:`__name__ == "模块名"`。
if __name__ == "__main__":
    main() # 仅在当前文件作为脚本执行时运行

除了导入的模块和自己写的模块,包目录下的 __init__.py 文件也是包的模块,甚至在 Python 3.3 之前存在 __init__.py 才会被识别为包。它常用来:

包中会有想暴露的 API,可以通过在包或模块中定义 __all__,用于指定 from 包 import * 时能导出的名称:

# mypkg/__init__.py
__all__ = ["utils", "models"]   # 只允许导出这两个子模块

同理,对于单个模块里也可以用 __all__ 限制 import * 时的可见对象。

类型

字面量

字符串

' 或者 " 包裹起来的字符串。可以通过加法拼接,可以通过乘法复制。

在字符串前面加个 r 字面量为原始字符串, 但如果里面有引号仍然需要转义.不能在输出尾端带有\, 系统会认为还没结束。

用三个双或者单引号可以实现长字符串(真正意义上的原始字符串),常常放在函数下面作为注释,lsp 也会读取相关内容作为提醒。

转义字符:

转义字符描述
\(在行尾时)续行符(行连接)
\\反斜杠字符本身
\'单引号
\"双引号
\a响铃(Bell)
\b退格(Backspace)
\000空字符(NUL,八进制写法示例)
\n换行
\v纵向制表符(vertical tab)
\t横向制表符(tab)
\r回车
\f换页
\0yy八进制数,yy 表示的字符。例如:\012 表示换行(前导 0 是字母 o 还是数字 0 要看上下文,这里通常是数字 0)。
\xYY十六进制数,YY 表示的字符。例如:\x0a 表示换行
\other其他字符以普通形式输出(\ 后面不是合法转义序列时的情况)

数字

支持科学记数法

虚数

可用 x+yj 或者 (x+yj) 来表示,对虚数对象是用方式 real 可查看实部, imag 是虚部。

基础类型

复合数据类型

列表(List)

一种可变、可包含任意类型、可嵌套的容器。

定义:

# 构造
a = [1,2,3,4,5,6]

# 访问,下面为切片
a[0:3]   # [1,2,3]
a[:3]    # [1,2,3]
a[3:]    # [4,5,6]
a[::-1]  # 反转

# 组合
[1,2,3] + [4,5]  # 拼接
[1,2,3] * 2      # [1,2,3,1,2,3]

# 多维列表
A = [[0] * 3 for _ in range(3)] # 推荐
A = [[0] * 3] * 3 # 不推荐:三行引用同一子列表,这是浅拷贝,等于复制指针

# 列表推导式
[expr for item in iterable]
[expr for item in iterable if cond]
[expr for i in A for j in B if cond]

方法:

方法说明
x.append(obj)末尾追加一个元素
x.extend(iterable)末尾追加多个元素
x.insert(i, obj)在下标 i 插入元素
x.remove(obj)删除首个等于 obj 的元素
del x[i] / del x[i:j:k]删除指定下标/切片
x.pop(i=-1)弹出并返回指定(默认末尾)元素
x.clear()清空列表
x.sort(key=None, reverse=False)就地排序
x.reverse()就地反转
x.count(obj)统计元素出现次数
x.index(obj, start=0, end=...)查找首个下标,不存在抛异常
x.copy()浅拷贝

元组(Tuple)

元组与列表的差别是不支持修改,故而它只用查的功能,其余差别不大。

t = (1, 2, 3)
t = 1, 2, 3          # 省略括号
single = (12,)       # 单元素元组

字符串(String)

与列表相差不大,不可变。不多阐述

大小写转换:

方法说明
s.capitalize()首字母大写,其余小写
s.casefold()更强的小写化(多语言)
s.title()每个单词首字母大写
s.swapcase()大小写反转
s.upper()全大写
s.lower()全小写(主要英文)

对齐与填充:

方法说明
s.center(width, fill=' ')居中
s.ljust(width, fill=' ')左对齐
s.rjust(width, fill=' ')右对齐
s.zfill(width)左侧补 0,保留正负号

查找与替换:

方法说明
s.count(sub, start=0, end=...)统计子串出现次数
s.find(sub, start=0, end=...)左到右第一个位置,找不到 -1
s.rfind(sub, start=0, end=...)右到左第一个位置,找不到 -1
s.expandtabs(tabsize=8)\t 转为空格
s.replace(old, new, count=-1)替换子串
s.translate(table) + str.maketrans按映射表替换 / 删除字符

判断类方法:

方法/函数说明
s.startswith(prefix)是否以 prefix 开头(可传元组)
s.endswith(suffix)是否以 suffix 结尾(可传元组)
s.istitle()是否标题格式
s.isupper() / s.islower()是否全大写 / 全小写
s.isalpha()是否只包含字母
s.isspace()是否全空白字符
s.isprintable()是否全为可打印字符
s.isdecimal()十进制数字
s.isdigit()数字(含上标等)
s.isnumeric()数字(范围最大)
s.isalnum()字母或数字
s.isidentifier()合法标识符
keyword.iskeyword(s)是否 Python 关键字

去除两端 / 前后缀:

方法说明
s.lstrip(chars=None)去左侧匹配 chars 中任一字符
s.rstrip(chars=None)去右侧
s.strip(chars=None)去左右两侧
s.removeprefix(prefix)删除前缀(3.9+)
s.removesuffix(suffix)删除后缀(3.9+)

分割与拼接:

方法说明
s.partition(sep) / s.rpartition(head, sep, tail)
s.split(sep=None, maxsplit=-1)从左分割为列表
s.rsplit(sep=None, maxsplit=-1)从右分割为列表
s.splitlines(keepends=False)按各种换行符分割
'sep'.join(iterable)用分隔符拼接字符串序列

格式化字符串:

# str.format
"1+2={}".format(1+2)
"{1}看到{0}".format("小甲鱼", "小姐姐")
"{name}{fav}".format(name="甲鱼", fav="Python")
"{:.2f}".format(3.1415)

# f-string(推荐,3.6+)
x = -520
f"{x:010}"          # -000000520
f"{3.1415:.2f}"     # 3.14
部分说明
[[fill]align]<>^ 居中 = 符号后对齐
sign+ 显示正负号,- 仅负号,空格为正数留空
0数字前补 0,如 {:010d}
width总宽度
, / _千分位分隔
.precision小数位数或有效位数
typeb o d x X e E f g % c n
#显示进制前缀(如 0b, 0x

字典(Dict)

d = {"1": "x", "2": "y"}
d["3"] = "z"
d = dict(a=1, b=2)
d = dict([("a", 1), ("b", 2)])
d = dict(zip(keys, values))

# 字典推导式
{k: v for k, v in d.items()}
{v: k for k, v in d.items()}
{x: ord(x) for x in "FishC"}

增删改查方法表:

操作/方法说明
dict.fromkeys(iterable, value)用同一默认值批量生成键
d[key]取值,键不存在抛 KeyError
d.get(key, default=None)取值,不存在返回 default
d.setdefault(key, default=None)若无此键则添加并返回 default,否则返回原值
d.update(other)批量更新 / 合并
d.pop(key, default=...)删除并返回值
d.popitem()删除并返回最后插入项(3.7+ 有序)
del d[key]删除键
d.clear()清空
d.copy()浅拷贝

视图与遍历:

方法说明
d.keys()键视图,随字典更新
d.values()值视图
d.items()(key, value) 视图
for k, v in d.items(): ...
len(d)
key in d
list(d)        # 所有 key

集合(Set)

无序、不重复;不支持索引。可用其看是否重复:len(s) == len(set(s))

方法:

方法 / 运算说明
set(iterable)创建集合
s.add(elem)添加元素
s.remove(elem)删除元素,不存在抛异常
s.discard(elem)删除元素,不存在也不报错
s.clear()清空
s.isdisjoint(t)是否无交集
s.issubset(t) / s <= t是否子集
s.issuperset(t) / s >= t是否超集
s.union(t) / s | t并集
s.intersection(t) / s & t交集
s.difference(t) / s - t差集
s.symmetric_difference(t) / s ^ t对称差集

序列与迭代

序列解包与星号解包:

t = (1, 2, 3)
x, y, z = t          # 完全解包,数量必须一致
x, *y = t            # x = 1, y = [2, 3],星号收集多余元素

拷贝:

浅拷贝 / 深拷贝:

y = x[:]            # 浅拷贝
y = x.copy()        # 浅拷贝
import copy
y = copy.deepcopy(x)  # 深拷贝

del 与切片删除:

x = [1, 2, 3, 4, 5]
del x[1:4]       # [1, 5]
x[1:4] = []      # 同样效果
del x[::2]       # 可按步长删除

迭代器与可迭代对象:

it = iter(obj)   # 可迭代 -> 迭代器
next(it)         # 依次取值,耗尽抛 StopIteration

序列通用函数速查表:

函数 / 类型转换说明
list(x) / tuple(x) / str(x)可迭代对象互转
max(...) / min(...)多个参数或单个序列;支持 default=
len(x)元素个数
sum(iterable, start=0)start 开始累加
sorted(iterable, key=None, reverse=False)返回新列表
reversed(seq)反向迭代器(原对象需支持反向)
all(iterable)所有元素为真则 True
any(iterable)至少一个元素为真则 True
enumerate(iterable, start=0)(index, value) 迭代器
zip(*iterables)聚合为元组序列,按最短序列截断
itertools.zip_longest类似 zip,可用 fillvalue 补齐
map(func, *iterables)逐元素映射,按最短序列长度
filter(func, iterable)保留 func(x) 为真值的元素

运算符

以下假设变量 a = 10,b = 20

运算符优先级:

运算符描述
*指数 (最高优先级)
  + -按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % //乘,除,取模和取整除
+ -加法减法
>> <<右移,左移运算符
&位 ‘AND’
^|位运算符
<= < > >=比较运算符
<> == !=等于运算符
= %= /= //= -= += *= *=赋值运算符
is is not身份运算符
in not in成员运算符
not and or逻辑运算符

算术运算符:

运算符描述实例
+加 - 两个对象相加a + b 输出结果 30
-减 - 得到负数或是一个数减去另一个数a - b 输出结果 −10
*乘 - 两个数相乘或是返回一个被重复若干次的字符串a b 输出结果 200 | | / | 除 - x 除以 y | b / a 输出结果 2.0 | | % | 取模 - 返回除法的余数 | b % a 输出结果 0 | | * | 幂 - 返回 x 的 y 次幂 | a b 为 10 的 20 次方, 输出结果 100000000000000000000
//取整除 - 返回商的整数部分(向下取整>>> 9//2 4 >>> -9//2 -5

一些算术函数:

比较运算符:

运算符描述实例
==等于 - 比较对象是否相等(a == b) 返回 False。
!=不等于 - 比较两个对象是否不相等(a != b) 返回 True。
<>不等于 - 比较两个对象是否不相等。python3 已废弃。(a <> b) 返回 True。这个运算符类似 != 。
>大于 - 返回 x 是否大于 y(a > b) 返回 False。
<小于 - 返回 x 是否小于 y。所有比较运算符返回 1 表示真,返回 0 表示假。这分别与特殊的变量 True 和 False 等价。(a < b) 返回 True。
>=大于等于 - 返回 x 是否大于等于 y。(a >= b) 返回 False。
<=小于等于 - 返回 x 是否小于等于 y。(a <= b) 返回 True。

赋值运算符:

运算符描述实例
=简单的赋值运算符 (可以令 x, y = y, x 实现替换)c = a + b 将 a + b 的运算结果赋值为 c
+=加法赋值运算符c += a 等效于 c = c + a
-=减法赋值运算符c -= a 等效于 c = c - a
= | 乘法赋值运算符 | c = a 等效于 c = c a | | /= | 除法赋值运算符 | c /= a 等效于 c = c / a | | %= | 取模赋值运算符 | c %= a 等效于 c = c % a | |=幂赋值运算符c = a 等效于 c = c a
//=取整除赋值运算符c //= a 等效于 c = c // a

位运算符:

运算符描述实例
&按位与运算符:参与运算的两个值, 如果两个相应位都为 1, 则该位的结果为 1, 否则为 0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为 1 时,结果位就为 1。(a|b) 输出结果 61 ,二进制解释: 0011 1101
按位异或运算符:当两对应的二进位相异时,结果为 1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
 按位取反运算符:将二进制表示中的每一位取反,0 变为 1,1 变为 0。 x 类似于 -x-1( a ) 输出结果 −61 ,二进制解释: 1100 0011 (以补码形式表示),在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补 0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把 “>>” 左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111

逻辑运算符:

运算符逻辑表达式描述实例
andx and y布尔 “与” - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。(a and b) 返回 20。
orx or y布尔 “或” - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。(a or b) 返回 10。
notnot x布尔 “非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。not(a and b) 返回 False

成员运算符:

运算符描述实例
in如果在指定的序列中找到值返回 True,否则返回 False。x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in如果在指定的序列中没有找到值返回 True,否则返回 False。x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

身份运算符:

运算符描述实例
isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

注: id() 函数用于获取对象内存地址。

控制流

# 条件判断
if 条件:
    语句1
    语句2
elif:
    语句3
else:
    语句4
level = ('D'if 0<=score <60 else
        'C' if 60 <= score <80 else
        "sdfjkslfjs")
等同于 
if 0<=score <60:
    level='D'
elif 60 <= score < 80:
    level='C'
else:
    level="sdfjkslfjs"

# 循环
while 条件:
    break //打破循环可使用break
    continue //跳过本次循环回到循环头
else:
    语句1 //这里else看起来没什么用,但是如果break跳出,如果条件仍为真,那么就不会执行else.这个就可以检测break有无被启用.
for 变量 in 可迭代对象:
这里需要说明一个函数:range(start,stop,step) (start默认为0,stop不包含,step可以为负数,只不过开头和结尾要倒序了)

# 模式匹配
match ... # 用到再补充

函数

定义:

def function(args):
  pass # pass 语句用于占位(空函数)
  return 1,2 # 若返回多个值,Python 自动将其打包为 **元组 (Tuple)**。

参数机制

参数类型表

参数类型语法示例说明备注
位置参数func(a, b)按顺序位置对应传参必须放在关键字参数之前。
关键字参数func(k=v)指定形参名进行传参顺序可打乱,提高代码可读性。
默认参数def f(a=1)定义时赋初值定义规则:必须位于非默认参数(位置参数)之后。若不传则使用默认值。
可变位置参数def f(*args)形参前加 *打包:收集多余的位置实参为 元组
可变关键字参数def f(*kwargs)形参前加 *打包:收集多余的关键字实参为 字典

参数解包与分隔符

解包 (Unpacking):在实参中使用 *(列表/元组)或 *(字典),将集合拆解为独立的参数传入函数。 限定符 (特殊形参): /:左侧仅限位置参数。 *:右侧仅限关键字参数。 示例:def f(pos_only, /, standard, *, kw_only): 传参约束: 位置参数必须在关键字参数之前。 不能对同一个形参多次赋值。

作用域与命名空间

LEGB 规则

Python 查找变量的顺序遵循 LEGB 原则: L (Local):本地作用域(函数内部)。 E (Enclosed):嵌套函数的外层函数作用域(闭包)。 G (Global):全局作用域(模块级别)。 B (Built-in):内置作用域(如 print, sum 等)。

作用域关键字

global:在局部作用域中声明并修改全局变量。 nonlocal:在嵌套函数中声明并修改外层(非全局)变量,常用于闭包。

闭包 (Closure)

核心:函数 + 环境变量。即使外层函数结束,内部函数依然能访问外层的局部变量。

def make_power(exponent):
    """ 外层函数:决定次方数(环境) """
    
    def power(base):
        """ 内层函数:使用外层的 exponent """
        return base ** exponent  # 引用了外部变量
    
    return power  # 返回函数对象,而非结果

# --- 调用示例 ---
square = make_power(2)  # 创建一个计算平方的闭包,记住了 exponent = 2
cube = make_power(3)    # 创建一个计算立方的闭包,记住了 exponent = 3

print(square(5))  # 输出: 25 (5^2)
print(cube(5))    # 输出: 125 (5^3)

# 进阶:使用 nonlocal 修改外部变量(带记忆功能的计数器)
def counter():
    count = 0
    def inc():
        nonlocal count  # 声明使用外层变量
        count += 1
        return count
    return inc

c = counter()
print(c(), c())  # 输出: 1 2

装饰器 (Decorator)

核心:不修改原代码,动态增加功能

无参装饰器 (两层嵌套)

def logger(func):
    """ 接收目标函数 func """
    def wrapper(*args, **kwargs):
        print(f"[日志] 正在执行: {func.__name__}")
        result = func(*args, **kwargs)  # 执行原函数
        print("[日志] 执行完毕")
        return result
    return wrapper  # 返回包装后的函数

# --- 语法糖写法 ---
@logger
def add(x, y):
    return x + y

# 等同于: add = logger(add)

add(1, 2)
# 输出:
# [日志] 正在执行: add
# [日志] 执行完毕

带参装饰器 (三层嵌套)

def repeat(n):
    """ 第一层:接收装饰器的参数 """
    def decorator(func):
        """ 第二层:接收目标函数 """
        def wrapper(*args, **kwargs):
            """ 第三层:执行逻辑 """
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator

# --- 调用示例 ---
@repeat(3)  # 先执行 repeat(3) 返回 decorator,再 @decorator
def say_hi():
    print("Hi~")

say_hi()
# 输出: (打印三次 Hi~)

匿名函数 (Lambda)

lambda arguments: expression
# 语法: lambda 参数: 表达式 (自动 return)

生成器 (Generator)

定义:使用 yield 语句代替 return 的函数。 机制:保存执行状态(挂起),每次调用 next() 或迭代时从上次暂停处继续执行。 表达式(x for x in data)(将列表推导式的方括号换为圆括号)。 优势:惰性求值,节省内存。

函数式编程工具

高阶函数:以函数为参数或返回值的函数。 functools 模块reduce(func, iterable):累积计算。将函数作用于序列的前两个元素,结果与下一个元素继续作用,直至结束。 partial(func, ...):偏函数。固定函数的部分参数,生成一个新的可调用对象(类似闭包原理)。

工程化规范

文档字符串 (Docstring):函数体内首行使用三引号 """...""" 定义,用于说明函数功能,可通过 help().__doc__ 查看。 函数注解 (Type Hints)语法:def func(arg: type, arg2: type = default) -> return_type: 内省:仅作提示,不强制类型检查,解释器运行时忽略。可通过 .__annotations__ 查看。

类与对象

基础定义与实例化

类 (Class) 是对象的蓝图,对象 (Object) 是类的实例化。属性默认存储在 __dict__ 字典中。

class ClassName:
    class_attr = 1  # 类属性(所有实例共享,除非被实例属性覆盖)

    # self: 实例自身的引用,必须作为方法的第一个参数
    def method(self):
        print(self.class_attr)

# 实例化
obj = ClassName()
obj.instance_attr = 2  # 动态绑定实例属性
# obj.__dict__  >> {'instance_attr': 2}

面向对象特性

特性说明抽象示例
封装将数据和操作捆绑,隐藏内部实现细节。class A: pass (基础结构)
继承子类自动获取父类的属性和方法。支持多重继承。class B(A): pass
组合在一个类中实例化另一个类,建立依赖关系。self.obj = OtherClass()
多态不同类的对象对同一消息做出响应(同名方法,不同实现)。obj.say() (具体行为取决于 obj 是猫还是狗)

代码示例:继承与组合

# --- 继承 (Is-a 关系) ---
class Father:
    def hello(self): print("Father")

class Son(Father):  # 子类
    def hello(self): print("Son") # 重写 (Override)

# --- 组合 (Has-a 关系) ---
class Dog:
    def bark(self): print("")

class Garden:
    def __init__(self):
        self.d = Dog()  # 组合:花园里有狗
    def noise(self):
        self.d.bark()   # 委托调用

继承进阶:MRO 与 钻石继承

钻石继承 (Diamond Inheritance):多个子类继承同一个父类,而这些子类又被同一个孙类继承。 MRO (Method Resolution Order):方法解析顺序,Python 使用 C3 算法(广度优先策略)解决调用冲突。

查看顺序ClassName.__mro__ Super 函数super() 按照 MRO 顺序调用下一个父类,避免父类被重复初始化,并解决多重继承问题。

class Base:
    def __init__(self): print("Base init")

class A(Base):
    def __init__(self):
        super().__init__()  # 自动查找 MRO 中的下一级
        print("A init")

class B(Base):
    def __init__(self):
        super().__init__()
        print("B init")

class C(A, B): # 多重继承
    def __init__(self):
        super().__init__()
        print("C init")

# c = C() 
# MRO 顺序: C -> A -> B -> Base -> object
# 确保 Base 只被初始化一次

属性控制与内省

机制语法说明
私有变量__var名字改编 (Name Mangling) 为 _ClassName__var,伪私有,约定不应从外部访问。
受保护变量_var约定俗成的内部变量(非强制)。
插槽__slots__ = ['x']限制实例只能有固定的属性。作用:节省内存(不创建 __dict__),禁止动态添加属性。
内省isinstance(o, Cls)检查对象是否属于某类(或其子类)。
内省issubclass(Sub, Sup)检查类是否是另一个类的子类。

魔术方法 (Magic Methods)

魔术方法是双下划线包围的方法,用于拦截 Python 的内置操作(如运算、打印、索引)。

构造与表现

方法调用场景示例代码
__new__(cls, ...)创建实例时(早于 init)。常用于不可变类型继承或元类。return super().__new__(cls, val)
__init__(self, ...)初始化实例时。self.x = x
__str__(self)print(obj)str(obj)。面向用户,可读性强。return f"User: {self.name}"
__repr__(self)repr(obj) 或 交互式命令行。面向开发者,准确性强。return f"Class(id={id(self)})"

运算符重载 (算术与比较)

将对象像数字一样进行运算。

class Vector:
    def __init__(self, x, y):
        self.x, self.y = x, y

    # + 运算符: obj + other
    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)
    
    # * 运算符: obj * other
    def __mul__(self, other):
        return self.x * other.x + self.y * other.y
    
    # == 运算符: obj == other
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y
        
    # 其他常用: __sub__ (-), __lt__ (<), __gt__ (>), __abs__ (abs())

容器与类型转换

将对象像列表或字典一样操作。

方法调用场景抽象示例
__len__(self)len(obj)return len(self.data)
__getitem__(self, k)obj[k] (索引/切片)return self.data[k]
__int__(self)int(obj)return int(self.val)
__index__(self)用于切片/进制转换 hex()return int(self.val)

异常

try:
    xxxxx #检测
except (error1,error2,error3) as e:#如果有相应 error 就执行, 一个 error 就不用元组形式, 可以不写直接识别全部, as e 是指相应的 error 描述结果输出到 e 中
    pass
except error4:
    pass
else:
    pass #这里是没触发异常回调到的地方
finally:
    无论有没有异常都会触发,必须经过的一环

由于您提供的文本内容完全是关于 “类与对象” (Class & Object) 的(包含继承、多态、魔术方法等),而标题要求为“函数”可能是复制粘贴上一个指令时的笔误。为了确保文档的准确性和可用性,我将标题修正为 类与对象,并按照您的格式要求进行整理。

常用函数

Built-in (内置函数)

> 无需 import,直接使用。

函数名示例作用
print()print("Hello", end="")输出信息到控制台,默认换行。
input()name = input("请输入:")获取用户输入的字符串。
len()len([1, 2, 3]) -> 3返回容器(列表、字符串等)的长度。
type()type(10) -> <class 'int'>返回对象的类型。
id()id(obj)返回对象的内存地址。
range()for i in range(0, 10, 2):生成整数序列(起始, 结束, 步长)。
enumerate()for i, v in enumerate(seq):遍历时同时获取 索引元素
zip()zip([1,2], ['a','b'])将多个序列对应元素打包成元组。
sorted()sorted([3,1,2]) -> [1,2,3]返回排序后的新列表(不修改原对象)。
open()with open('f.txt', 'w') as f:打开文件(推荐配合 with 上下文管理器)。
help()help(str)查看函数或模块的帮助文档。
dir()dir(list)列出对象的所有属性和方法。

random 模块

> 用于生成伪随机数。 > import random

函数名示例作用
random()random.random()生成 [0.0, 1.0) 的随机浮点数。
randint()random.randint(1, 10)生成 [a, b] 的随机整数(含边界)。
uniform()random.uniform(1.5, 3.0)生成指定范围内的随机浮点数。
choice()random.choice(['a', 'b'])从序列中随机选取一个元素。
sample()random.sample(list, 2)无放回随机抽取 k 个元素(截取片段)。
shuffle()random.shuffle(list)原地打乱列表顺序。
seed()random.seed(42)初始化种子,保证随机结果可复现。

math & decimal 模块

> 数学运算与高精度计算。 > import math, import decimal

函数名示例作用
math.ceil()math.ceil(3.1) -> 4向上取整。
math.floor()math.floor(3.9) -> 3向下取整。
math.sqrt()math.sqrt(16) -> 4.0计算平方根。
math.pow()math.pow(2, 3) -> 8.0计算 x 的 y 次方(返回浮点)。
decimal.Decimal()Decimal('0.1')创建高精度十进制数(务必传字符串)。

time & datetime 模块

> 时间处理与格式化。 > import time, from datetime import datetime

函数名示例作用
time.time()t = time.time()获取当前时间戳(1970年至今的秒数)。
time.sleep()time.sleep(2)程序暂停(休眠)指定秒数。
datetime.now()datetime.now()获取当前日期和时间对象。
strftime()now.strftime("%Y-%m-%d")对象转字符串(Format Time)。
strptime()datetime.strptime(s, fmt)字符串转对象(Parse Time)。

os & sys 模块

> 操作系统交互与系统参数。 > import os, import sys

函数名示例作用
os.getcwd()os.getcwd()获取当前工作目录路径。
os.listdir()os.listdir('.')列出指定目录下的所有文件/文件夹名。
os.mkdir()os.mkdir('new_dir')创建单级目录。
os.makedirs()os.makedirs('a/b/c')递归创建多级目录。
os.path.join()os.path.join('user', 'bin')智能拼接文件路径(适配 Win/Linux 分隔符)。
os.path.exists()os.path.exists('file.txt')判断文件或路径是否存在。
sys.argvargs = sys.argv获取命令行运行时的参数列表。
sys.exit()sys.exit(0)退出程序(0为正常,非0为异常)。
sys.pathsys.path.append(...)模块搜索路径列表(可动态添加)。

json 模块

> JSON 数据交换。 > import json

函数名示例作用
dumps()s = json.dumps(dict_obj)Python 对象(字典) -> JSON 字符串。
loads()d = json.loads(json_str)JSON 字符串 -> Python 对象(字典)。
dump()json.dump(data, f)直接将对象写入 JSON 文件。
load()data = json.load(f)直接读取 JSON 文件为对象。

re 模块

> 正则表达式 (Regular Expression)。 > import re

函数名示例作用
re.search()re.search(r'\d', 'a1b')扫描并返回第一个匹配对象。
re.findall()re.findall(r'\d', 'a1b2')返回所有匹配的子串列表。
re.sub()re.sub(r'\d', '', 'a1b2')替换字符串中的匹配项。
re.compile()p = re.compile(r'\d')编译正则模式,提高重复使用的效率。

collections 模块

> 增强型数据容器。 > from collections import ...

类名示例作用
CounterCounter(['a','b','a'])统计元素频次,返回字典 {元素: 次数}
defaultdictd = defaultdict(int)访问不存在的 key 时自动赋默认值,不报错。
dequeq = deque([1,2])双端队列,支持高效的从头/尾添加或删除。