写点什么

Python 基础之:Python 中的内部对象

发布于: 2021 年 04 月 06 日

简介

Python 中内置了很多非常有用的对象,本文将会介绍 Python 中的内置函数,内置常量,内置类型和内置异常。

内置函数

Python 解释器内置了很多函数和类型,您可以在任何时候使用它们。

内置常量

Python 中内置了少量的常量,我们可以直接在代码中使用他们。

  • False

表示的是 bool 类型的假值。

  • True

表示的是 bool 类型的真值。

  • None

是 NoneType 类型的唯一值。None 表示缺少值。

  • NotImplemented

__eq__()__lt__()__add__()__rsub__()的特殊返回值,表示会在假值的时候返回 NotImplemented

  • Ellipsis

等同于字面值  ,主要与用户定义的容器数据类型的扩展切片语法结合使用。

  • __debug__

编译器内部的变量,用来表示是否开启 debug 模式。

内置类型

python 中的主要内置类型有数字、序列、映射、类、实例和异常。

逻辑值检测

在 python 中,任何对象都可以做逻辑值的检测。

一个对象在默认情况下均被视为真值,除非当该对象被调用时其所属类定义了 __bool__()方法且返回 False 或是定义了 __len__() 方法且返回零。

下面是集中被认为是 false 值的对象:

  • 被定义为假值的常量: None 和 False

  • 任何数值类型的零: 00.00jDecimal(0)Fraction(0, 1)

  • 空的序列和多项集: ''()[]{}set()range(0)

逻辑值的布尔运算

布尔运算主要有 or, not 和 and:

比较运算

具有不同标识的类的实例比较结果通常为不相等,除非类定义了 __eq__()方法。

数字类型

Python 中有三种不同的数据类型:整数浮点数 和 复数

所有数字类型(复数除外)都支持下列运算:

对于 int 和 float 还支持下面的运算:

整数类型的位运算

对于整数来说,还支持位运算:

整数类型的附加方法

int 还有一些额外的方法:

int.bit_length()

返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零:

>>> n = -37>>> bin(n)'-0b100101'>>> n.bit_length()6
复制代码

int.to_bytes(lengthbyteorder, *, signed=False)

返回表示一个整数的字节数组。

(1024).to_bytes(2, byteorder='big')b'\x04\x00'(1024).to_bytes(10, byteorder='big')b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'(-1024).to_bytes(10, byteorder='big', signed=True)b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'x = 1000x.to_bytes((x.bit_length() + 7) // 8, byteorder='little')b'\xe8\x03'
复制代码

byteorder 参数确定用于表示整数的字节顺序。 如果 byteorder 为 "big",则最高位字节放在字节数组的开头。 如果 byteorder 为 "little",则最高位字节放在字节数组的末尾。

signed 参数确定是否使用二的补码来表示整数。

浮点类型的附加方法

float.is_integer()

如果 float 实例可用有限位整数表示则返回 True,否则返回 False:

>>> (-2.0).is_integer()True>>> (3.2).is_integer()False
复制代码

float.hex()

以十六进制字符串的形式返回一个浮点数表示。

迭代器

迭代器主要用在容器的遍历中。

如果容器需要提供迭代支持,必须定义下面的方法:

container.__iter__()

这个方法返回一个迭代器对象。这个迭代器对象需要提供下面的两个方法:

iterator.__iter__()

返回迭代器对象本身。

iterator.__next__()

从容器中返回下一项。

序列类型

有三种基本序列类型:list, tuple 和 range 对象。

下面是通用的序列操作:

可变序列类型的操作:

序列类型包括列表,元组,range 对象和文本序列 str。

这里重点看下 str 的方法:

还包括几个二进制序列类型: bytesbytearraymemoryview

bytes 对象是由单个字节构成的不可变序列。

表示 bytes 字面值的语法与字符串字面值的大致相同,只是添加了一个 b 前缀。

bytearray 对象是 bytes 对象的可变对应物。bytearray 对象没有专属的字面值语法,它们总是通过调用构造器来创建。

我们看下 bytes 和 bytearray 的基本操作:

memoryview 对象允许 Python 代码访问一个对象的内部数据,只要该对象支持 缓冲区协议 而无需进行拷贝。

obj 必须支持缓冲区协议。 支持缓冲区协议的内置对象包括 bytes 和 bytearray。

集合类型

集合中存放的是不重复的数据。主要有 set 和 frozenset 两种。

set 类型是可变的 — 其内容可以使用 add() 和 remove() 这样的方法来改变。 由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。

frozenset 类型是不可变并且为 hashable — 其内容在被创建后不能再改变;因此它可以被用作字典的键或其他集合的元素。

看下集合的基本操作:

映射类型

python 中的映射类型是 dict。只要是 hashable 的对象都可以作为 dict 的 key。

字典可用多种方式来创建:

  • 使用花括号内以逗号分隔 键: 值 对的方式: {'jack': 4098, 'sjoerd': 4127} or {4098: 'jack', 4127: 'sjoerd'}

  • 使用字典推导式: {}{x: x ** 2 for x in range(10)}

  • 使用类型构造器: dict()dict([('foo', 100), ('bar', 200)])dict(foo=100, bar=200)

如果没有给出位置参数,将创建一个空字典。

字典的操作:

字典视图对象

由 dict.keys(), dict.values() 和 dict.items() 所返回的对象是 视图对象。 该对象提供字典条目的一个动态视图,这意味着当字典改变时,视图也会相应改变。

字典视图可以被迭代以产生与其对应的数据,并支持成员检测:

内置异常

Python 中所有的异常都来自 BaseException ,我们看下内置异常的层级结构:

BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception      +-- StopIteration      +-- StopAsyncIteration      +-- ArithmeticError      |    +-- FloatingPointError      |    +-- OverflowError      |    +-- ZeroDivisionError      +-- AssertionError      +-- AttributeError      +-- BufferError      +-- EOFError      +-- ImportError      |    +-- ModuleNotFoundError      +-- LookupError      |    +-- IndexError      |    +-- KeyError      +-- MemoryError      +-- NameError      |    +-- UnboundLocalError      +-- OSError      |    +-- BlockingIOError      |    +-- ChildProcessError      |    +-- ConnectionError      |    |    +-- BrokenPipeError      |    |    +-- ConnectionAbortedError      |    |    +-- ConnectionRefusedError      |    |    +-- ConnectionResetError      |    +-- FileExistsError      |    +-- FileNotFoundError      |    +-- InterruptedError      |    +-- IsADirectoryError      |    +-- NotADirectoryError      |    +-- PermissionError      |    +-- ProcessLookupError      |    +-- TimeoutError      +-- ReferenceError      +-- RuntimeError      |    +-- NotImplementedError      |    +-- RecursionError      +-- SyntaxError      |    +-- IndentationError      |         +-- TabError      +-- SystemError      +-- TypeError      +-- ValueError      |    +-- UnicodeError      |         +-- UnicodeDecodeError      |         +-- UnicodeEncodeError      |         +-- UnicodeTranslateError      +-- Warning           +-- DeprecationWarning           +-- PendingDeprecationWarning           +-- RuntimeWarning           +-- SyntaxWarning           +-- UserWarning           +-- FutureWarning           +-- ImportWarning           +-- UnicodeWarning           +-- BytesWarning           +-- ResourceWarning
复制代码

本文已收录于 http://www.flydean.com/11-python-inner-obj/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 2021 年 04 月 06 日阅读数: 10
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
Python基础之:Python中的内部对象