Python 内置对象
date
Feb 5, 2020
slug
5589751209945088
status
Published
tags
Python
summary
type
Post
内置类型有哪些
- 主要内置类型有数字、序列、映射、类、实例和异常
假值内置对象
- 被定义为假值的常量:
None 和 False
- 任何数值类型的零:
0, 0.0, 0j, Decimal(0), Fraction(0, 1)
- 空的序列和多项集:
'', (), [], {}, set(), range(0)
数字类型
- 数字类型有 整数, 浮点数 和 复数。布尔值属于整数的子类型
- 构造器
int()
,float()
和complex()
可被用于生成特定类型的数字
整数类型的附加方法
方法 | 功能 |
bit_length() | 返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零 |
to_bytes(length, byteorder, *, signed=False) | 返回表示一个整数的字节数组 |
from_bytes(bytes, byteorder, *, signed=False) | 返回由给定字节数组所表示的整数 |
as_integer_ratio() | 返回一对整数,其比率正好等于原整数并且分母为正数。 整数的比率总是用这个整数本身作为分子,1 作为分母 |
浮点类型的附加方法
方法 | 功能 |
as_integer_ratio() | 返回一对整数,其比率正好等于原浮点数并且分母为正数。 无穷大会引发 OverflowError 而 NaN 则会引发 ValueError |
is_integer() | 如果 float 实例可用有限位整数表示则返回 True ,否则返回False |
hex() | 以十六进制字符串的形式返回一个浮点数表示。 对于有限浮点数,这种表示法将总是包含前导的 0x 和尾随的 p 加指数 |
fromhex(s) | 返回以十六进制字符串 s 表示的浮点数的类方法。 字符串 s 可以带有前导和尾随的空格 |
迭代类型
- Python 支持在容器中进行迭代的概念。 通过使用两个单独方法来实现的;它们被用于允许用户自定义类对迭代的支持
- 容器对象要提供迭代支持,必须定义一个方法
>
container.__iter__()
返回一个迭代器对象。 该对象需要支持下文所述的迭代器协议。 如果容器支持不同的迭代类型,则可以提供额外的方法来专门地请求不同迭代类型的迭代器
- 迭代器对象自身需要支持以下两个方法,它们共同组成了 迭代器协议
>
iterator.__iter__()
返回迭代器对象本身。 这是同时允许容器和迭代器配合 for 和 in 语句使用所必须的
iterator.__next__()从容器中返回下一项。 如果已经没有项可返回,则会引发 StopIteration 异常
生成器类型
- Python 的
generator
提供了一种实现迭代器协议的便捷方式。 如果容器对象__iter__()
方法被实现为一个生成器,它将自动返回一个迭代器对象(从技术上说是一个生成器对象),该对象提供__iter__()
和__next__()
方法
序列类型
- 基本序列类型有
list
,tuple
和range
对象
通用序列操作
- 大多数序列类型,包括可变类型和不可变类型都支持运算操作
- 序列运算
注: s 和 t 是具有相同类型的序列,n, i, j 和 k 是整数而 x 是任何满足 s 所规定的类型和值限
运算 | 结果
:–: | –
x in s
|如果 s 中的某项等于 x 则结果为 True
,否则为 Falsex not in s
| 如果 s 中的某项等于 x 则结果为 False
,否则为 Trues + t
| s 与 t 相拼接
s * n 或 n * s
| 相当于 s 与自身进行 n 次拼接
s[i]
| s 的第 i 项,起始为 0
s[i:j]
| s 从 i 到 j 的切片
s[i:j:k]
| s 从 i 到 j 步长为 k 的切片
len(s)
| s 的长度
min(s)
| s 的最小项
max(s)
| s 的最大项
s.index(x[, i[, j]])
|x 在 s 中首次出现项的索引号(索引号在 i 或其后且在 j 之前)
s.count(x)
| x 在 s 中出现的总次数不可变序列类型
- 不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对
hash()
内置函数的支持
- 尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致
TypeError
可变序列类型
- 序列运算
以下表格中的操作是在可变序列类型上定义的
注: 表格中的 s 是可变序列类型的实例,t 是任意可迭代对象,而 x 是符合对 s 所规定类型与值限制的任何对象
运算 | 结果 |
s[i] = x | 将 s 的第 i 项替换为 x |
s[i:j] = t | 将 s 从 i 到 j 的切片替换为可迭代对象 t 的内容 |
del s[i:j] | 等同于 s[i:j] = [] |
s[i:j:k] = t | 将 s[i:j:k] 的元素替换为 t 的元素 |
del s[i:j:k] | 从列表中移除 s[i:j:k] 的元素 |
s.append(x) | 将 x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x]) |
s.clear() | 从 s 中移除所有项 (等同于 del s[:]) |
s.copy() | 创建 s 的浅拷贝 (等同于 s[:]) |
s.extend(t) 或 s += t | 用 t 的内容扩展 s (基本上等同于 s[len(s):len(s)] = t) |
s *= n | 使用 s 的内容重复 n 次来对其进行更新 |
s.insert(i, x) | 在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x]) |
s.pop([i]) | 提取在 i 位置上的项,并将其从 s 中移除 |
s.remove(x) | 删除 s 中第一个 s[i] 等于 x 的项目。 |
s.reverse() | 就地将列表中的元素逆序。 |
列表
- 列表是可变序列,通常用于存放同类项目的集合
list([iterable])
可以用多种方式构建列表- 使用一对方括号来表示空列表:
[]
- 使用方括号,其中的项以逗号分隔:
[a], [a, b, c]
- 使用列表推导式:
[x for x in iterable]
- 使用类型的构造器:
list() 或 list(iterable)
元组
- 元组是不可变序列,通常用于储存异构数据的多项集
tuple([iterable])
可以用多种方式构建元组- 使用一对圆括号来表示空元组:
()
- 使用一个后缀的逗号来表示单元组:
a, 或 (a,)
- 使用以逗号分隔的多个项:
a, b, c or (a, b, c)
- 使用内置的 tuple():
tuple() 或 tuple(iterable)
range对象
range
类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数
文本序列类型
- 在 Python 中处理文本数据是使用
str
对象,也称为 字符串。 字符串是由 Unicode 码位构成的不可变 序列 - 单引号:
'
允许包含有"
双"
引号'
- 双引号:
"
允许包含有'
单'
引号"
。 - 三重引号:
'''
三重单引号'''
,"""
三重双引号"""
- 使用三重引号的字符串可以跨越多行 —— 其中所有的空白字符都将包含在该字符串字面值中
- 作为单一表达式组成部分,之间只由空格分隔的多个字符串字面值会被隐式地转换为单个字符串字面值
二进制序列类型
- 操作二进制数据的核心内置类型是
bytes
和bytearray
bytes 对象
bytes
对象是由单个字节构成的不可变序列
构造器:
bytes([source[, encoding[, errors]]])
- bytes 字面值的语法与字符串字面值的大致相同,只是添加了一个 b 前缀
- 单引号: b’同样允许嵌入 “双” 引号’。
- 双引号: b”同样允许嵌入 ‘单’ 引号”。
- 三重引号: b’‘’三重单引号’’’, b”““三重双引号”“”
bytearray 对象
构造器:
bytearray([source[, encoding[, errors]]])
bytearray
对象没有专属的字面值语法,通过调用构造器来创建- 创建一个空实例:
bytearray()
- 创建一个指定长度的以零值填充的实例:
bytearray(10)
- 通过由整数组成的可迭代对象:
bytearray(range(20))
- 通过缓冲区协议复制现有的二进制数据:
bytearray(b'Hi!')
集合类型
set
对象是由具有唯一性的hashable
对象所组成的无序多项集set
对象是由具有唯一性的hashable
对象所组成的无序多项集
- 目前有两种内置集合类型,
set
和frozenset
- set 类型是可变的 。其内容可以使用
add()
和remove()
这样的方法来改变。 由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。frozenset
类型是不可变并且为hashable
。其内容在被创建后不能再改变;因此它可以被用作字典的键或其他集合的元素
构造器:
set([iterable])
frozenset([iterable])
映射类型
- 映射属于可变对象
- 字典是标准映射类型
- 字典可以通过将以逗号分隔的 键: 值 对列表包含于花括号之内来创建
构造器:
dict(**kwarg)
dict(mapping, **kwarg)
dict(iterable, **kwarg)
上下文管理器类型
Python 的
with
语句支持通过上下文管理器所定义的运行时上下文这一概念。 此对象的实现使用了一对专门方法,允许用户自定义类来定义运行时上下文,在语句体被执行前进入该上下文,并在语句执行完毕时退出该上下文其他内置类型
模块
- 模块唯一的特殊操作是属性访问:
m.name
,m
为一个模块而name
访问定义在m
的符号表中的一个名称。 模块属性可以被赋值
类与类实例
- 类定义是一条可执行语句,Python 程序中的所有数据都是由对象或对象间关系来表示的 ### 函数
- 函数对象是通过函数定义创建的 ### 方法
- 方法是使用属性表示法来调用的函数。 存在两种形式:内置方法和类实例方法 ### 代码对象
- 代码对象被具体实现用来表示“伪编译”的可执行 Python 代码 ### 类型对象
- 类型对象表示各种对象类型 ### 空对象
- 此对象会由不显式地返回值的函数所返回。 不支持任何特殊的操作。 空对象只有一种值
None
### 省略符对象
- 此对象常被用于切片。 不支持任何特殊的操作。 省略符对象只有一种值
Ellipsis
### 未实现对象
- 此对象会被作为比较和二元运算被应用于它们所不支持的类型时的返回值。 未实现对象只有一种值
NotImplemented
### 布尔值
- 布尔值是两个常量对象
False
和True
### 内部对象
- 其中描述了栈帧对象、回溯对象以及切片对象等等
## 特殊属性
| | |
:–: | –
object.__dict__
| 一个字典或其他类型的映射对象,用于存储对象的(可写)属性。instance.__class__
| 类实例所属的类。class.__bases__
| 由类对象的基类所组成的元组。definition.__name__
| 类、函数、方法、描述器或生成器实例的名称。definition.__qualname__
| 类、函数、方法、描述器或生成器实例的qualified name
。class.__mro__
| 此属性是由类组成的元组,在方法解析期间会基于它来查找基类。class.mro()
| 此方法可被一个元类来重载,以为其实例定制方法解析顺序。 它会在类实例化时被调用,其结果存储于__mro__
之中。class.__subclasses__()
|每个类会保存由对其直接子类的弱引用组成的列表。 此方法将返回一个由仍然存在的所有此类引用组成的列表。