Python3内置函数
目录
目录结构
abs
abs(x) 返回数字的绝对值。 x 可以是整数,浮点数,复数;如果是复数,则返回它的大小。
| |
dict
- class dict(**kwarg) 等号模式
- class dict(mapping, **kwarg) zip模式
- class dict(iterable, **kwarg) 二元组列表
主要是zip模式和二元元组模式
| |
help
help([object]) object – 对象;
返回对象帮助信息。
| |
min_max
返回可迭代参数中的最小、最大元素。
| |
setattr、getattr
(attr——attribute)
setattr用于设置对象的属性值,getattr用于获取对象的属性值。相比于 “.” 功能更丰富。
- 当实例a有属性bar时,当使用setattr(a, ‘bar’, 5)时,会将实例a属性bar设置为5;
- 当实例a无属性bar时,会为实例a创建一个实例属性bar,赋值为5,而类属性不变。
- getattr当属性不存在时避免抛出AttributeError,若设置默认值,则不会报错。例如,getattr(a, ‘baz’, ‘default’)会返回’default’,而a.baz则会引发异常。
| |
all 、any
all:是否都为True any:是否存在True
all(iterable, /)
- 判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
- 元素除了是 0、空、None、False 外都算 True。
- 空元组、空列表返回值为True,这里要特别注意。
- 不会进入内层。
| |
- any(iterable, /)
- “是否存在 True”的意思,True代表的是 非空类数据。
dir
- dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表
- 带参数时——dir([object]),返回参数的属性、方法列表。
- 如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
| |
输出包含 ‘_MyClass__private_attr’, ’normal_method’, ‘public_attr’
[ ‘_MyClass__private_attr’, ‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, …… ‘normal_method’, ‘public_attr’ ]
实际应用场景
- 快速查看对象内容
- 动态检查对象功能
- 限制暴露的接口(设置接口)
| |
| |
| |
拓展:属性名以双下划线 __ 开头且不以双下划线结尾 —— 名称修饰,避免子类与父类的私有属性命名冲突,Python会自动将其转换为:_类名__属性名 (如刚才的_MyClass__private_attr)
| |
hex 、oct
hex(x):将10进制int转为16进制且为字符串,0x为前缀。
1 2 3 4 5a=16 print(type(a)) # <class 'int'> b=hex(a) print(b) # 0x10 print(type(b)) # <class 'str'>hex(x):将10进制int转为8进制且为字符串,0o为前缀。
1 2 3 4a=16 b=hex(a) print(b) # 0o20 print(type(b)) # <class 'str'>
next
- next()返回迭代器的的下一个项目;要和生成迭代器函数 iter() 配合使用。
| |
一个参数是iter()生成的迭代器实例,另一个是默认值,如果指针超出范围就输出默认。
常见应用
| |
- 我理解的next()是python 内置的__next__方法,因为iter类有__next__方法,而其他的如生成器也有,自定义一个类并定义__next__方法,该类弄出的实例也可以用next()
| |
- 拓展 这样有双下划线的方法和无双下划线的有什么区别?如__getitem__(self)。 —— Python 的特殊方法(魔术方法)是由 Python 语言规范定义的。这些方法与 Python 的内置操作直接关联:
| |
slice
slice()返回一个切片对象。
slice(stop)
slice(start, stop[, step]),(起点,终点,步长)直接使用 创建slice [:5] slice(None, 5) / slice(None, 5) [3::2] slice(3, None, 2) [::-1] slice(None, None, -1) 类似于a:b:c
| |
但是要保存为对象的话:
| |
对于 lst[slice(95, 105, 2)],为什么不用 lst[95:105:2] ? —— 定义slice的优势
动态参数配置
1 2 3 4 5 6 7def dynamic_slicer(config): """根据外部配置生成切片""" return data[slice(*config)] # 从配置文件读取参数 config = json.loads('{"start": 95, "stop": 105, "step": 2}') print(dynamic_slicer(config.values())) # 动态应用切片参数切片对象复用
1 2 3 4 5 6# 定义标准切片规则 DOWNSAMPLE_SLICE = slice(None, None, 4) # 每4个元素取1个 # 复用切片 video_frames = raw_frames[DOWNSAMPLE_SLICE] audio_samples = raw_audio[DOWNSAMPLE_SLICE]多维切片基础
1 2 3 4 5 6 7 8 9 10 11 12 13import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr[0:2, 1:3]) # 输出 [[2 3], [5 6]] # 定义行和列的切片对象 row_slice = slice(0, 2) # 第0行到第1行(不含2) col_slice = slice(1, 3) # 第1列到第2列(不含3) print(arr[row_slice, col_slice]) # 输出 [[2 3], [5 6]]
divmod
divmod() 函数接受两个参数 x y(通常是两个数字),返回二元组,第一个值是 x 除以 y 的商(即整数部分),第二个值是余数。
对于3.x,参数不能是复数, x 可以为整数/浮点数,y 也如此
| |
应用场景
进制转换
1 2 3 4 5 6 7 8def int_to_base(n, base): digits = [] while n > 0: n, rem = divmod(n, base) # 除留余数法 digits.append(rem) # 余数先存进去,是低位 return digits[::-1] # 逆序 print(int_to_base(42, 16)) # [2, 10] 表示 0x2A时间单位转换
1 2 3 4total_seconds = 7541 hours, rem = divmod(total_seconds, 3600) minutes, seconds = divmod(rem, 60) print(f"{hours}:{minutes}:{seconds}") # 2:5:41循环缓冲区处理,类似哈希表的“线性法直接mod”
1 2 3 4 5 6buffer_size = 1024 write_pos = 1500 # 计算实际写入位置 chunk, offset = divmod(write_pos, buffer_size) print(f"写入第 {chunk} 个缓冲区的 {offset} 位置")
id
id()函数返回对象的唯一标识符,标识符是一个整数。
CPython 中 id() 函数获取的是对象的内存地址。(python3.9——CPython3.9)
1 2 3 4 5a=13 b=3 print(id(a)) # 3054276471472 print(id(b)) # 3054276471152 print(type(id(a))) # <class 'int'>拓展:不同的python
需要最佳兼容性 → CPython (主,兼容性最好,标准)
与 Java 生态整合 → Jython
需要 .NET 互操作 → IronPython
追求高性能 → PyPy
嵌入式开发 → MicroPython
object
- object():不接收任何参数,返回一个空对象
| |
object() 的核心价值:
所有类的基类:提供默认行为
轻量级对象:用于简单场景
方法继承:提供默认的 __str__、__eq__ 等方法
sorted
sorted() 对 所有可迭代的对象 进行排序操作。
sort 与 sorted 区别:
sort 是 list 的方法,sorted 可对所有可迭代的对象应用。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sorted(iterable, key=None, reverse=False),三个参数,依次是 可迭代变量、选择内层元素的函数方法、升序or降序。
1 2 3 4ls=[(3,2),(1,4),(5,3),(2,6)] new_ls=sorted(ls,key=lambda x:x[0],reverse=True) # 对象为列表 ls,方法是 通过首层元素的第0个元素排序,True->降序 print(ls) # [(3, 2), (1, 4), (5, 3), (2, 6)] print(new_ls) # [(5, 3), (3, 2), (2, 6), (1, 4)] 得到 5 3 2 1 降序sorted<->sort reversed<->reverse
ascii
ascii(object) ,返回object的字符串,对于字符串中的非 ASCII 字符则通过 repr() 函数使用 \x, \u 或 \U 编码。
1 2 3 4a=[[1,2,3],[3,4,5]] b=ascii(a) print(type(b)) # <class 'str'> print(b.split(',')) # ['[[1', ' 2', ' 3]', ' [3', ' 4', ' 5]]']
enumerate
enumerate(seq, [start=0])
将seq的元素挨个取出和0,1,2,3….组成二元组,各个二元组组成enumerate类型,enumerate不可索引。
1 2 3 4 5 6 7 8seasons=[[1,2,3],[4,5,6]] print(type(enumerate(seasons))) # <class 'enumerate'> for i, element in enumerate(seasons): print(i, element) # 0 [1, 2, 3] 1 [4, 5, 6] for j in enumerate(seasons): print(type(j)) # <class 'tuple'> print(j[0],j[1]) # 0 [1, 2, 3] break(主)同时获取索引 i,和元素本身element:
1 2for i, element in enumerate(seasons): print(i, element)
input
input([prompt]) :在命令行提示prompt,然后接收命令行输入的信息为字符串。
1 2a = input("input:") type(a) # <class 'str'>和strip、map结合
1 2 3 4 5 6 7# strip() 去掉文末空格 a=input('输入:').strip() # 输入“123 ” 去掉文末空字符 print(len(a)) # 3 a=input('输入:') # 输入“123 ” 不去掉文末空字符 print(len(a)) # 4 b=list(map(int, input('输入:').split())) # 输入“1 2 3” 输出[1,2,3]- 标准空白字符
字符名称 转义序列 空格 \x20 水平制表符(Tab) \t 换行符(LF) \n 回车符(CR)(Mac 换行) \r 垂直制表符 \v 换页符 \f
- 标准空白字符
staticmethod
@staticmethod 用于定义静态方法的装饰器,返回函数的静态方法。
1 2 3 4class C(object): @staticmethod def add(a, b): return a + b特点:
- 代码中的add函数不能有“self”(实例引用)和“cls”类引用
- 是类命名空间中的函数,不需要实例便可调用
- 不能直接访问实例属性或类属性,因为无self/cls
静态方法与普通方法对比
特征 普通方法 静态方法 第一个参数 self(实例引用) 非self非类 调用方式 实例调用 类/实例均可调用 访问权限 可访问实例属性 仅能访问传入参数 1 2 3 4 5 6 7class MyClass: def normal_method(self): print(f"实例方法:{self}") # 依赖实例 @staticmethod def static_method(): print("静态方法") # 无依赖
bin
- bin() 输入:一个整数 int 或者长整数 long int。返回:二进制的字符串。
| |
open
open(name[, mode[, buffering]])
常与with联用
1 2 3 4 5# 例子 with open('_20_data.txt', 'r') as file: # 读取数据 N\n1 2 3 n = int(file.readline().strip()) data = list(map(int, file.read().split()))w从头写 r只读 a追加
读写方式 是否为 二进制 是否为 可读可写 r 空 空 w b + a 共 3*2*2=12种
模式对照表 和 f.seek(n)
模式 描述 文件存在 文件不存在 指针位置 r+ 读写(文件必须存在) 不清空,从指针位置“覆盖写” 报错 开头 w+ 写读(清空后读写) 必定清空,从指针位置写 创建 开头 a+ 追加读写 必定从末尾写 创建 末尾 1 2 3 4 5 6 7 8 9 10 11 12 13 14# 创建文件 with open('test_r+.txt', 'w') as f: f.write('旧内容') # r+ try: # 不存在改文件会报错 with open('test_r+.txt', 'r+') as f: print(f.read()) # 输出: 旧内容^ (^指针位置) f.seek(0) # ^旧内容 (移动指针位置到开头) f.write('新') # 新^内容 (从指针位置覆盖写入) f.seek(0) # ^新内容 print(f.read()) # 输出: 新内容 except FileNotFoundError: print("文件不存在")1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16# 创建文件 with open('test_w+.txt', 'w') as f: f.write('原始内容') # w+ with open('test_w+.txt', 'w+') as f: f.write('全新内容') # 清空后写入 全新内容^ f.seek(0) # 移动指针到开头 ^全新内容 print(f.read()) # 输出: 全新内容 # 文件不存在时 import os with open('new_w+.txt', 'w+') as f: f.write('创建内容') f.seek(0) print(os.path.abspath('new_w+.txt')) # 输出: 创建的文件的绝对路径1 2 3 4 5 6 7 8 9 10 11 12 13 14 15# 创建文件 with open('test_a+.txt', 'w') as f: f.write('初始行\n') # a+ with open('test_a+.txt', 'a+') as f: f.write('追加行\n') # 追加行\n^ f.seek(0) # ^初始行\n追加行\n print(f.read()) # 输出: 初始行\n追加行\n # 验证指针特性 f.seek(5) # 初始行\n追^加行\n f.write('中间插入') # 仍然追加到文件末尾! f.seek(0) print(f.read()) # 输出: 初始行\n追加行\n中间插入
eval
eval(表达式的字符串[, globals[, locals]]),执行一个字符串表达式,并返回表达式的值。
1 2 3 4 5 6 7 8 9 10 11 12 13# 简单表达式 result = eval("2 + 3 * 4") print(result) # 输出: 14 # 变量引用 x = 10 result = eval("x + 5") print(result) # 输出: 15 # 指定变量空间 namespace = {'a': 2, 'b': 3} # 必须是字典 result = eval("a + b", namespace) print(result) # 输出: 5eval() 执行代码有安全风险,可能导致代码注入漏洞,并确保仅执行可信任的字符串表达式。 设置命名空间的内置函数和类型 —— __builtins__
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19# 安全沙箱环境配置 safe_globals = { '__builtins__': { 'abs': abs, 'max': max, 'min': min, 'pow': pow, 'round': round } } # 安全计算示例 result = eval("pow(2, 3) + abs(-5)", safe_globals) # 输出: 13 # 危险操作示例(将被阻止) try: eval("open('test.txt')", safe_globals) except NameError as e: print(f"安全拦截: {e}") # 输出: name 'open' is not defined拓展: __builtins__
1 2 3 4 5 6 7# 查看内置函数列表 print(dir(__builtins__)) # 输出: ['ArithmeticError', 'AssertionError', ...,' iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', ...] # 调用内置函数 print(__builtins__.len([1,2,3])) # 输出: 3 print(len([1,2,3])) # 等价
int
int(x, base=10) -> integer,将一个数字或字符串转为一个int类型数据(10进制), 如果没有参数返回0。 如果带参数base的话,第一个参数一定要是字符串
1 2 3 4 5 6 7 8 9#小数点后直接删了 print(int(3.6)) # 3 # 如果带参数base的话,第一个参数一定要是字符串。1a为 16进制。 print(int('1a',16)) # 26 # int被print时都是10进制,int其他进制字符串转为10进制表示的int print(int('0xaa',16)) # 16 * 10 + 1 * 10 = 70 print(int('0b110',2)) # 4+2=6int([x]) -> integer,[x]可以是str, bytes, or bytearray 且符合该进制(由base确定)的字面量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19with open('test.txt','wb+') as f: # 写入bytes类型内容 f.write(b'12') f.seek(0) # 读取bytes byte_ls=f.readline() print(byte_ls) # b'12' print(type(byte_ls)) # <class 'bytes'> # 默认10进制转换 int_ls=int(byte_ls) print(int_ls) # 12 print(type(int_ls)) # <class 'int'> # 设置为8进制 int_ls=int(byte_ls, 8) print(int_ls) # 10
str
str(object=’’),返回一个对象的字符串。
1print(type(str(123))) # <class 'str'>对比str()和ascii()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15dict = {'a': 'b'} # 转换一些数据结构是一样的 print(str(dict)) # {'a': 'b'} print(ascii(dict)) # {'a': 'b'} # 对于字符串数据,str不会将'转字符串里,ascii严格转 s = 'rooobeam' print(str(s)) # RUNOOB print(ascii(s)) # 'RUNOOB' # 对于非ASCII字符,str没事,转义为Unicode码点 ss = '阿道夫' print(str(ss)) # 阿道夫 print(ascii(ss)) # '\u963f\u9053\u592b'输出目标 非ASCII字符处理 字符处理 特殊字符转义 主要用途 str 人类可读的字符串 原样 无 仅转义控制字符如\n 用户友好 ascii Python可解析str Unicode码点(如\u4e2d) 始终用单引号包裹 转义所有非ASCII字符 调试和安全
bool
bool(x) 将给定参数转换为布尔类型,如果没有参数,返回 False。
1 2 3print(bool(0)) # False print(bool(1)) # Ture print(bool(2)) # True(bool是int的子类,然并卵。)
Returns True when the argument x is true, False otherwise.
exec
exec(object[, globals[, locals]]),执行储存在字符串或文件中的 Python 语句,可执行更复杂的 Python 代码。
1 2 3 4exec(''' print("where you are") print("where is love") ''')globals,locals类似 eval。
非常不安全,永远不要执行没有检验过的代码。
可用__builtins__限制命名空间。
isinstance
isinstance(object, classinfo)——isinstance(实例a, 类A),判断实例a 是不是 A 或 A的子类 的实例化。
1 2 3 4a = 2 isinstance(a,int) # True a是int类型 isinstance(a,str) # False a不是str类型 isinstance(a,(str,int,list)) # True 元组里有a的类型isinstance() 与 type() 区别:
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
1 2 3 4 5 6 7 8a = bool() print(type(a)==int) # False # 子类是父类的一种,a是子类则a是父类 print(isinstance(a,int)) # True # 反之不成立 b = int() print(isinstance(b,bool)) # False
ord、chr
ord(c),c为字符,返回 Unicode 码点 (十进制int) for a one-character string.
1 2 3 4print(ord('a')) # 97 print(ord("a")) # 97 print(ord('€')) # 8364 print(type(ord('a'))) # intchr(i) ,ord的反向操作 返回一个one-character string 对应输入的unicode码点(十进制int), 0 <= i <= 0x10ffff (unicode的最大码点).
1 2 3print(chr(65)) # 'A'(65对应'A') print(chr(9731)) # '☃'(9731对应雪人符号) print(type(chr(9731))) # str
sum
对iterable的元素求和
| |
bytes、bytearray
- 初始化空bytearray、bytes
- bytearray() -> empty bytes array
- bytes() -> empty bytes object
| |
- 初始化n个 \x00
- bytearray(int) -> bytes array of size given by the parameter initialized with null bytes
- bytes() -> empty bytes object
| |
- 转换int的可迭代类型([1,2,3], (1,2,3), {1,2,3}等)
- bytearray(iterable_of_ints) -> bytearray
- bytes(iterable_of_ints) -> bytes
| |
- 转换字符串类型
| |
- bytes、bytearray、memoryview 和其他自定义的缓冲区对象间相互转换
- bytearray(bytes_or_buffer) -> mutable copy of bytes_or_buffer
- bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
| |
对比。
不同:
是否可修改
使用 b’’ 或 bytes() 创建还是使用 bytearray() 创建
file.read()得出的是bytes
相同:
存储内容:都存储字节数据(0到255之间的整数,\x00~\xff)。
二进制数据:都适合处理二进制数据,如文件、网络通信等。
索引和切片:都支持通过索引和切片访问数据。
| |
filter
- filter(function or None, iterable) –> filter object
- filter 函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,函数需返回 True 或 False,最后将返回 True 的元素放到filter中。
| |
- 如果function那里填了None,则返回非空元素。
| |
filter 对象是惰性求值的,这点类似于生成器。
一旦迭代过 filter 对象,其内容就会被消耗,无法再次使用。
如果需要多次访问,可转换为列表或其他可迭代对象。
| |
issubclass
- issubclass(class1, class2),判断 class1 是否为 class2 的子类。
| |
pow
pow(base, exp, mod=None) pow(底数,指数,模数=None)
两个参数时,得到 base**exp,三个参数时,得到 base**exp % mod
对于一些类型的参数如int型参数它能算得更快。
| |
super
一句话概括:调用父类方法,改变传入实例。
super(class, obj ),class——指定从哪个类开始查找父类方法,obj——传入的对象
译为 创建一个 传入了对象obj的 可调用class的父类的方法的 对象
| |
在一个类里,super()=super(当前类, self),会自动绑定当前类和实例(self),适用于类方法中。
译为 创建一个 传入了self的 可调用当前类的父类的方法的 对象
| |
可不可以理解为 super(Child,self) 首先找到 Child 的父类(Parent),然后把类 Child 的对象转换为类 Parent 的对象? —— False
可能会发生死循环吗? —— True
| |
- 多重继承问AI
float
将一个字符串或整数转为浮点数
| |
iter
iter() 用于获取可迭代对象的迭代器,两种传参:(iterable) 、(callable, sentinel)
iter(iterable) -> iterator 传入可迭代对象,如列表、字符串,转为iter.
(“给对象生成__iter__() 和 __next__()”)
| |
- iter(callable, sentinel) -> iterator,重复调用无参函数callable,直到其返回值等于sentinel(哨兵值)时停止
| |
拓展(__iter__)
Python 的迭代器:实现 __iter__() 和 __next__() 方法的对象被视为迭代器
| |
- 以后遇到了再补充了
print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
sep间隔 默认一个空格,print完成后补充内容 默认一个换行符,输出文件 默认控制台,是否刷新缓存默认否。
| |
tuple
- tuple(iterable=(), /),将可迭代对象转为元组类型,元组数据不可修改。
| |
- 判断是否为可迭代对象
| |
callable
- callable(可调用对象)是指任何可以通过 () 运算符调用的对象。例如:函数、方法、类,或者实现了 call 方法的对象,是否具有__call__
| |
| |
| |
- 拓展:类装饰器(通过 __call__ 实现)
| |
format、f-string
- 基础用法:基本替换、位置索引、传递变量值
| |
| |
常用控制格式:小数位数、进制转换、小数转百分比
特别是 f"{num:2f}"
| |
- format或f-string下大括号用{{}}(双重大括号)
| |
- 其他对齐、填充啥的要用再查就好了,太没用了
len
求各种序列的长度
| 数据类型 | len() 结果 |
|---|---|
| 字符串 | 字符个数(包括空格 " “、 \t、\n 等) |
| 列表/元组 | 元素数量 |
| 字典 | 键值对数量 |
| 集合 | 元素数量 |
| 字节/字节数组 | 字节数量 |
| 自定义对象 | 取决于 __len__() 方法的实现 |
| |
property
property 的核心用途是将类的方法转换为“虚拟属性”,1 将方法伪装成"属性”, 优雅地控制"属性"。
@property @ method.setter @method.deleter
| |
- 对比 “.” 访问属性 和 使用property
| 场景 | 直接访问属性 | 使用 property | 优势对比说明 |
|---|---|---|---|
| 数据校验 | ❌ 无法验证 | ✅ 通过 setter 控制 | 避免非法值赋值(如负半径) |
| 动态计算属性值 | ❌ 需手动计算 | ✅ 实时计算(如 面积 = πr²) | 属性值随依赖变量自动更新,无需额外调用方法 |
| 隐藏内部实现 | ❌ 暴露变量名 | ✅ 封装私有变量(如 _radius) | 保护内部数据命名,外部仅通过属性接口访问 |
| 接口兼容性 | ❌ 修改变量名会破坏外部调用 | ✅ 外部仍用 obj.x,内部可自由修改 | 内部变量名可重构(如 _radius → _r),不影响外部调用,减少代码耦合性 |
type
- type(object) -> the object’s type 返回对象的type,打印type会显示<….>
| |
是否考虑继承关系:type不承认,isinstance() 会认为子类是一种父类类型。
即“a是A的实例,a是A的父类的实例吗”
| |
- type(name, bases, dict, **kwds) -> a new type,了解,遇到了再补充
| |
set
- 集合
- set() -> new empty set object 创建空集合,注意A={}创建的是空字典
| |
- set(iterable) -> new set object 将可迭代数据变为集合,能起到去重效果
| |
- 集合推导式 和 直接初始化
| |
- 集合对象的方法
| 方法 | 作用 | 返回值/行为 |
|---|---|---|
add(element) | 添加单个元素 | 原地修改集合,无返回值 |
remove(element) | 删除指定元素(元素不存在时报错) | 原地修改集合,元素不存在时抛 KeyError |
discard(element) | 删除指定元素(元素不存在时不报错) | 原地修改集合,无返回值 |
clear() | 清空集合 | 原地清空集合,无返回值 |
s.update({4, 5}) → s 包含新元素 | 合并多个集合(原地修改) | 原地修改集合,无返回值 |
s1.intersection_update(s2) | 原地保留交集(仅保留共同元素) | 原地修改集合,无返回值 |
s1.difference_update(s2) | 原地保留差集(移除其他集合的元素) | 原地修改集合,无返回值 |
s1.isdisjoint(s2) → True/False | 判断两个集合是否无交集 | 返回 True/False |
s2 = s1.copy() → 生成独立副本 | 浅拷贝集合 | 返回新集合的浅拷贝(与原集合独立) |
frozenset
直译为 冻结集合
frozenset() -> empty frozenset object
( 空 frozenset 最重要的作用是 作为安全的不可变默认值,避免使用可变空集合如 set()时,因意外修改导致的程序逻辑错误 )
| |
frozenset(iterable) -> frozenset object
Build an immutable unordered collection of unique elements.
创建一个 不可修改的 无序的 元素collection,元素有唯一性。
将 可迭代数据 变成一个 冻结的集合
| |
- frozenset({A, B})类似一个“组合值”,可以作为字典的键或集合的元素(可哈希性)
| |
- 支持集合操作
| 作用 | 方法 |
|---|---|
| 返回并集 | fs1.union(fs2) → 同 `fs1 |
| 返回交集 | fs1.intersection(fs2) → 同 fs1 & fs2 |
| 返回差集(A - B) | fs1.difference(fs2) → 同 fs1 - fs2 |
| 判断是否为子集 | fs1.issubset(fs2) → False |
| 返回副本(与原对象相同) | fs2=fs.copy() → 新 frozenset |
list
- list(iterable=(), /),
| 函数/操作 | 作用 | 示例 |
|---|---|---|
| 定义列表 | 创建列表 | my_list = [1, "a", True] |
| 索引 | 访问单个元素(支持正负索引) | my_list[0],my_list[-1] |
| 切片 | 截取子列表 | my_list[1:3] |
| 直接赋值 | 修改单个元素 | my_list[0] = 100 |
| 切片赋值 | 修改或替换子列表 | my_list[1:2] = [200, 300] |
append(x) | 在末尾添加单个元素 | list = [1,2]; list.append(3) |
extend(iterable) | 合并可迭代对象到末尾 | list = [1,2]; list.extend([3,4]) → [1,2,3,4] |
del list[0:2] | 删除元素 | list = [1,2,3]; del list[1] → [1,3] |
| 列表推导式 | 生成列表 | y=[x if x>1 else -1 for x in [1,2,3] ] |
sort() | 原地排序 | list = [3,1,2]; list.sort() |
reverse() | 原地反转列表顺序 | list = [1,2,3]; list.reverse() |
copy() | 创建浅拷贝列表 | new_list = list.copy() |
count(x) | 统计元素 x 的出现次数 | list = [1,2,2,3]; list.count(2) -> 2 |
index(x) | 返回 x 第一次出现的索引 | list = [1,2,2,3]; list.index(2) -> 1 |
| 浅拷贝 | 复制外层对象(嵌套共享引用) | a = [[1,2],3]; b = a.copy() |
len(list) | 返回列表长度 | len([1,2,3]) |
max(list) | 返回最大值 | max([1,3,2]) |
min(list) | 返回最小值 | min([1,3,2]) |
sum(list) | 对数值列表求和 | sum([1,2,3]) |
any(list) | 检查是否存在为 True 的元素 | any([0, False, 1]) |
all(list) | 检查是否所有元素为 True | all([1, True, 0]) |
enumerate(list) | 返回索引-值对的迭代器 | list(enumerate(["a", "b"])) |
- 列表推导式
- enumerate 同时获取 索引和元素
| |
range
- range(end) -> [0, end,1) “从0开始,到end之前,包括0不包括end,步长为1”
| |
- range(start, end, step) -> [start, end, step) “从start开始,到end之前,包括start不包括end,步长为step”
| |
- range(start, end, -1) -> [start, end, -1) 从大到小的range,step为负值,start必须>=end
| |
classmethod
classmethod是一种装饰器,用于**@classmethod定义类方法**。
| 方法类型 | 装饰器 | 首个参数 | 访问权限 | 典型场景 |
|---|---|---|---|---|
| 实例方法 | 无 | self | 实例属性、类属性 | 操作实例数据 |
| 类方法 | @classmethod | cls | 类属性、其他类方法 | 工厂方法、操作类状态 |
| 静态方法 | @staticmethod | 无 | 无法访问类属性、实例属性 | 工具函数,与类逻辑相关但不依赖数据 |
- 用于需要访问或修改类状态。
| |
- 实现工厂模式 —— 类方法创建对象,比如,根据文件扩展名(如
.json、.xml、.csv)创建相应的解析器对象,封装了 所支持的格式 的 类属性、获取特定格式对象 的 类方法。
| |
repr
repr(obj, /) 返回对象的规范字符串,用于明确描述对象状态。
始终为自定义类定义
__repr__,避免默认的<ClassName object at 0x...>输出。优先使用f-string生成返回值。
print()时 或 交互式环境中输入对象名时(如
>>> obj) 调用obj的__repr__输出相关信息。
| |
zip
- zip(*iterables) ,*iterables表名可有多个可迭代对象,返回一个元素为元组的
zip对象,以最短的可迭代对象为终点。
| |
- 其他:
- N个iterable的则N元组,
- 惰性计算类似生成器、iter(),过一遍就没了
- zip(*) 解压
| |
- 把各个迭代对象压缩在一起,可以一起遍历,且惰性计算。(占空间小)
map
- map(func, *iterables) 创建一个迭代器(map),存有各可迭代对象的参数依次执行函数计算的结果,当最短的可迭代对象耗尽时终止。
- 数据值处理
| |
- 数据类型处理,用上各种内置函数如int list str,但不括号
| |
reversed
- reversed(sequence, /) Return a reverse iterator over the values of the given sequence.
- 迭代器类型,占用空间没那么大,惰性计算,过一遍就没了… 注意要加’d’ reversed
| |
-更常用的方式:[::-1]。但得是可切片型数据,即要有__getitem__方法
| |
import_module
- 动态导入模块,尤其是在需要根据运行时条件(如配置文件、用户输入、插件系统等)决定加载哪些模块。
| |
complex
- complex([real[, imag]]),返回复数
| |
hasattr
hasattr(obj, name, /) Return whether the object has an attribute with the given name.
hasattr(检查对象, 名字)
检查对象(类实例、类、模块等)是否有 指定的 属性/方法,返回True/False
属性/方法:字符串
| |
- 复习getattr、setattr
rooobeam • 著 rooobeam • 著 rooobeam • 著 rooobeam • 著 rooobeam • 著
rooobeam • 著 rooobeam • 著 rooobeam • 著 rooobeam • 著 rooobeam • 著
rooobeam • 著 rooobeam • 著 rooobeam • 著 rooobeam • 著 rooobeam • 著
10000词!