python切片操作 当所有数据都省略时_3. 数据模型

没有此类型只有一个值。有一个具有此值的对象。通过内置名称访问此对象 None .它用于表示在许多情况下没有值,例如,从不显式返回任何内容的函数返回值。它的真实价值是错误的。

NotImplemented此类型只有一个值。有一个具有此值的对象。通过内置名称访问此对象 NotImplemented . 如果数值方法和富比较方法未实现所提供操作数的操作,则它们应返回此值。(然后,解释器将尝试反射操作或其他一些回退,具体取决于运算符。)不应在布尔上下文中对其求值。

见 实现算术运算 了解更多详细信息。

在 3.9 版更改:评价 NotImplemented 在布尔上下文中不推荐使用。虽然它当前的计算结果为true,但它将发出 DeprecationWarning . 它会引起 TypeError 在未来的Python版本中。

省略此类型只有一个值。有一个具有此值的对象。通过文本访问此对象 ... 或内置名称 Ellipsis .它的真实价值是真实的。

它们由数字文本创建,并由算术运算符和算术内置函数作为结果返回。数字对象是不可变的;一旦创建了它们的值,就永远不会改变。当然,python数字与数学数字有很强的关联,但受制于计算机中数字表示的局限性。

python区分整数、浮点数和复数:

这些表示整数(正整数和负整数)的数学集合中的元素。

整数有两种类型:

整数 (int )

这些表示无限范围内的数字,仅限于可用(虚拟)内存。为了进行移位和屏蔽操作,假设使用二进制表示法,用2的补码变量表示负数,这样会产生一个无限长的符号位串延伸到左边的假象。

布尔值 (bool )这些都代表了真理的价值观——假与真。表示值的两个对象 False 和 True 是唯一的布尔对象。布尔类型是整数类型的子类型,布尔值在几乎所有上下文中的行为都与值0和1类似,但当转换为字符串时,字符串 "False" 或 "True" 分别返回。

整数表示规则旨在对涉及负整数的移位和屏蔽操作给出最有意义的解释。

这些表示机器级双精度浮点数。您接受了底层机器体系结构(和C或Java实现)的作用,以便接受溢出和处理。python不支持单精度浮点数;通常使用这些浮点数的原因是节省了处理器和内存的使用量,而在python中使用对象的开销则相形见绌,因此没有理由用两种浮点数使语言复杂化。

它们将复数表示为一对机器级双精度浮点数。同样的警告也适用于浮点数。复数的实部和虚部 z 可以通过只读属性检索 z.real 和 z.imag .

序列这些表示由非负数索引的有限有序集。内置功能 len() 返回序列的项数。当序列的长度为 n ,索引集包含数字0,1,…, n - 1。项目 i 序列的 a 被选中 a[i] .

序列还支持切片: a[i:j] 选择带索引的所有项目 k 这样的话 i <= k < j . 当用作表达式时,切片是同一类型的序列。这意味着索引集将重新编号,以便从0开始。

一些序列还支持使用第三个“step”参数进行“扩展切片”: a[i:j:k] 选择的所有项 a 带索引 x 在哪里? x = i + n*k , n >= 0 和 i <= x < j .

序列根据其可变性进行区分:

不可变序列不可变序列类型的对象一旦创建就不能更改。(如果对象包含对其他对象的引用,则这些其他对象可能是可变的,并且可以更改;但是,不可变对象直接引用的对象集合不能更改。)

以下类型是不可变序列:

字符串字符串是表示Unicode代码点的值序列。范围内的所有代码点 U+0000 - U+10FFFF 可以用字符串表示。 Python 没有 char 类型;相反,字符串中的每个代码点都表示为具有长度的字符串对象。 1 . 内置功能 ord() 将代码点从其字符串形式转换为范围内的整数 0 - 10FFFF ; chr() 转换范围内的整数 0 - 10FFFF 到相应的长度 1 字符串对象。 str.encode() 可用于转换 str 到 bytes 使用给定的文本编码,以及 bytes.decode() 可以用来达到相反的效果。

多元组元组的项是任意的python对象。两个或多个项的元组由逗号分隔的表达式列表组成。一个项的元组(“singleton”)可以通过在表达式上附加逗号来形成(表达式本身不创建元组,因为括号必须可用于表达式分组)。空元组可以由一对空括号组成。

字节字节对象是不可变数组。项目是8位字节,由0<=x<256范围内的整数表示。字节文本(如 b'abc' )以及内置的 bytes() 构造函数可用于创建字节对象。此外,字节对象可以通过 decode() 方法。

可变序列可变序列可以在创建后更改。订阅和切片标记可以用作分配的目标,并且 del (删除)语句。

目前有两种固有的可变序列类型:

列表列表中的项是任意的python对象。列表是通过在方括号中放置以逗号分隔的表达式列表而形成的。(请注意,不需要特殊情况来形成长度为0或1的列表。)

字节数组Bytearray对象是可变数组。它们是由内置的 bytearray() 构造函数。字节数组除了是可变的(因此是不可变的),还提供了与不可变的相同的接口和功能。 bytes 物体。

扩展模块 array 提供可变序列类型的附加示例,以及 collections 模块。

集合类型这些表示无序的、有限的、唯一的、不变的对象集。因此,它们不能被任何下标编入索引。但是,它们可以迭代,并且内置函数 len() 返回集合中的项数。集合的常见用途是快速成员资格测试,从序列中删除重复项,以及计算数学运算,如交集、并集、差分和对称差分。

对于集合元素,相同的不可变规则适用于字典键。请注意,数字类型遵守数字比较的常规规则:如果两个数字比较相等(例如, 1 和 1.0 ,一个集合中只能包含其中一个。

当前有两种内部集类型:

集合它们代表一个可变的集合。它们是由内置的 set() 然后可以通过多种方法进行修改,例如 add() .

冻结集它们代表一个不变的集合。它们是由内置的 frozenset() 构造函数。因为冻结集是不变的 hashable ,它可以再次用作另一个集合的元素或字典键。

映射这些表示由任意索引集索引的有限对象集。下标符号 a[k] 选择索引项 k 从地图上 a ;这可以在表达式中使用,也可以作为赋值的目标,或者 del 声明。内置功能 len() 返回映射中的项数。

当前有一个内部映射类型:

辞典这些表示由几乎任意值索引的有限对象集。唯一不能作为键接受的值类型是包含列表或字典或其他可变类型的值,这些值是按值而不是按对象标识进行比较的,原因是字典的有效实现要求键的hash值保持不变。用于键的数字类型遵循数字比较的常规规则:如果两个数字比较相等(例如, 1 和 1.0 )然后可以互换使用它们来索引同一个字典条目。

字典保留插入顺序,这意味着键将按照在字典上按顺序添加的顺序生成。替换现有密钥不会更改顺序,但是删除密钥并重新插入它会将其添加到末尾,而不是保留其原来的位置。

字典是可变的;它们可以由 {{...}} 符号(见第节 词典显示 )

在 3.7 版更改:字典在3.6之前的Python版本中没有保留插入顺序。在CPython 3.6中,插入顺序被保留下来,但当时它被认为是一个实现细节,而不是一个语言保证。

可调用类型这些是函数调用操作的类型(请参见第节 调用 )可以应用:

用户定义函数用户定义的函数对象由函数定义创建(请参见第节 函数定义 )应该使用参数列表调用它,该参数列表包含与函数的形参列表相同数量的项。

特殊属性:

属性

意义

__doc__

函数的文档字符串,或 None 如果不可用;不由子类继承。

可写的

函数的名称。

可写的

__module__

在中定义函数的模块的名称,或 None 如果不可用。

可写的

__defaults__

包含具有默认值的参数的默认参数值的元组,或者 None 如果没有参数具有默认值。

可写的

__code__

表示已编译函数体的代码对象。

可写的

__globals__

对保存函数全局变量的字典的引用——定义函数的模块的全局命名空间。

只读

支持任意函数属性的命名空间。

可写的

__closure__

None 或者包含函数自由变量绑定的单元格的元组。有关 cell_contents 属性。

只读

__annotations__

一种包含参数注释的字典。dict的键是参数名,以及 'return' 对于返回注释(如果提供)。

可写的

__kwdefaults__

包含仅关键字参数的默认值的dict。

可写的

标记为“可写”的大多数属性都检查指定值的类型。

函数对象还支持获取和设置任意属性,例如,可以使用这些属性将元数据附加到函数。常规属性点表示法用于获取和设置此类属性。 Note that the current implementation only supports function attributes on user-defined functions. Function attributes on built-in functions may be supported in the future.

单元格对象具有属性 cell_contents . 这可以用于获取单元格的值,也可以设置该值。

可以从函数的代码对象中检索有关函数定义的其他信息;请参见下面的内部类型描述。这个 cell 可以在中访问类型 types 模块。

实例方法实例方法对象组合了类、类实例和任何可调用对象(通常是用户定义的函数)。

特殊只读属性: __self__ 是类实例对象, __func__ 是函数对象; __doc__ 方法的文档(与 __func__.__doc__ ; __name__ 方法名(与 __func__.__name__ ; __module__ 是在中定义方法的模块的名称,或 None 如果不可用。

方法还支持访问(但不设置)基础函数对象上的任意函数属性。

如果用户定义的方法对象是用户定义的函数对象或类方法对象,则可以在获取类的属性(可能通过该类的实例)时创建用户定义的方法对象。

当实例方法对象通过其实例之一从类中检索用户定义的函数对象而创建时,其 __self__ 属性是实例,方法对象被称为绑定的。新方法的 __func__ 属性是原始函数对象。

当通过从类或实例中检索类方法对象来创建实例方法对象时,其 __self__ 属性是类本身,它的 __func__ 属性是类方法的基础函数对象。

当调用实例方法对象时,基础函数 (__func__ )调用,插入类实例 (__self__ )在参数列表前面。例如,当 C 是包含函数定义的类 f() 和 x 是的实例 C 呼唤 x.f(1) 等于调用 C.f(x, 1) .

当实例方法对象从类方法对象派生时,“类实例”存储在 __self__ 实际上是类本身,因此调用 x.f(1) 或 C.f(1) 等于调用 f(C,1) 在哪里? f 是基础函数。

注意,每次从实例中检索属性时,都会发生从函数对象到实例方法对象的转换。在某些情况下,有效的优化是将属性赋给局部变量并调用该局部变量。另外请注意,此转换只对用户定义的函数发生;其他可调用对象(以及所有不可调用对象)在不进行转换的情况下进行检索。还需要注意的是,属于类实例属性的用户定义函数不会转换为绑定方法;这 only 当函数是类的属性时发生。

生成器功能一种使用 yield 声明(见第节 这个 yield 陈述 )被称为 generator function . 当调用此类函数时,始终返回可用于执行函数体的迭代器对象:调用迭代器的 iterator.__next__() 方法将导致函数执行,直到它使用 yield 语句。当函数执行 return 陈述或结尾脱落,a StopIteration 引发异常,迭代器将到达要返回的值集的结尾。

协程函数一种函数或方法,用 async def 被称为 coroutine function . 这样的函数在调用时返回 coroutine 对象。它可能包含 await 表达式,以及 async with 和 async for 声明。也见 协程对象 部分。

异步生成器功能一种函数或方法,用 async def 它使用 yield 语句称为 asynchronous generator function . 当调用此类函数时,返回一个异步迭代器对象,该对象可用于 async for 执行函数体的语句。

调用异步迭代器 aiterator.__anext__() 方法将返回 awaitable 它将在等待时执行,直到它使用 yield 表达式。当函数执行空 return 陈述或结尾脱落,a StopAsyncIteration 引发异常,异步迭代器将到达要生成的值集的结尾。

内置功能内置函数对象是围绕C函数的封装器。内置函数的示例有 len() 和 math.sin() (math 是一个标准的内置模块)。参数的数量和类型由C函数决定。特殊只读属性: __doc__ 是函数的文档字符串,或者 None 如果不可用; __name__ 是函数的名称; __self__ 设置为 None (但见下一项); __module__ 是在或中定义函数的模块的名称 None 如果不可用。

内置方法这实际上是内置函数的另一种伪装,这次包含一个作为隐式额外参数传递给C函数的对象。内置方法的一个例子是 alist.append() 假设 主义者 是列表对象。在这种情况下,特殊的只读属性 __self__ 设置为由表示的对象 主义者 .

Classes类是可调用的。这些对象通常充当它们自己的新实例的工厂,但是对于重写的类类型,可以进行更改。 __new__() .调用的参数传递给 __new__() 在典型情况下, __init__() 初始化新实例。

类实例通过定义 __call__() 方法。

模块模块是Python代码的基本组织单元,由 import system 由调用 import 语句,或通过调用诸如 importlib.import_module() 内置 __import__() . 模块对象具有由Dictionary对象实现的命名空间(这是由 __globals__ 模块中定义的函数的属性)。属性引用被转换为本字典中的查找,例如, m.x 等于 m.__dict__["x"] . 模块对象不包含用于初始化模块的代码对象(因为初始化完成后不需要它)。

属性分配更新模块的命名空间字典,例如, m.x = 1 等于 m.__dict__["x"] = 1 .

预定义(可写)属性: __name__ 是模块的名称; __doc__ 是模块的文档字符串,或者 None 如果不可用; __annotations__ (可选)是包含 variable annotations 模块体执行时采集; __file__ 是从文件加载模块的文件的路径名(如果从文件加载模块)。这个 __file__ 某些类型的模块(如静态链接到解释器的C模块)可能缺少属性;对于从共享库动态加载的扩展模块,它是共享库文件的路径名。

特殊只读属性: __dict__ 是作为字典对象的模块命名空间。

CPython implementation detail: 由于cpython清除模块字典的方式,当模块超出范围时,模块字典将被清除,即使字典仍然有活动引用。要避免这种情况,请在直接使用字典时复制字典或保留模块。

自定义类自定义类类型通常由类定义创建(请参见第节 类定义 )类具有由Dictionary对象实现的命名空间。类属性引用被转换为此字典中的查找,例如, C.x 转换为 C.__dict__["x"] (尽管有许多钩子允许使用其他方法定位属性)。如果在那里找不到属性名,则属性搜索将在基类中继续。对基类的搜索使用c3方法解析顺序,该顺序在存在“菱形”继承结构的情况下(其中有多个继承路径通向一个共同的祖先)也能正常工作。关于python使用的c3 mro的更多详细信息,可以在2.3版本附带的文档中找到,网址为https://www.python.org/download/releases/2.3/mro/。

当类属性引用(对于类 C ,例如)将生成一个类方法对象,将其转换为一个实例方法对象,该实例方法对象的 __self__ 属性是 C . 当它将生成静态方法对象时,它将被转换为由静态方法对象封装的对象。见节 实现描述符 另一种方法是,从类中检索到的属性可能与实际包含在 __dict__ .

类属性分配更新类的字典,而不是基类的字典。

可以调用类对象(参见上文)以生成类实例(参见下文)。

特殊属性: __name__ 是类名; __module__ 是定义类的模块名; __dict__ 是包含类的命名空间的字典; __bases__ 是包含基类的元组,按照它们在基类列表中出现的顺序排列; __doc__ 是类的文档字符串,或者 None 如果未定义; __annotations__ (可选)是包含 variable annotations 在类体执行期间收集。

类实例类实例是通过调用类对象创建的(参见上文)。类实例有一个实现为字典的命名空间,该字典是搜索属性引用的第一个地方。如果在那里找不到属性,并且实例的类具有该名称的属性,则搜索将继续使用类属性。如果发现一个类属性是用户定义的函数对象,它将被转换为一个实例方法对象,该对象的 __self__ 属性是实例。静态方法和类方法对象也会被转换;请参见上面“类”下的内容。见节 实现描述符 另一种方法是,通过实例检索的类的属性可能与实际存储在类中的对象不同。 __dict__ . 如果找不到类属性,并且对象的类具有 __getattr__() 方法来满足查找。

属性赋值和删除更新实例的字典,而不是类的字典。如果类有 __setattr__() 或 __delattr__() 方法,而不是直接更新实例字典。

如果类实例具有具有某些特殊名称的方法,那么它们可以假装为数字、序列或映射。见节 特殊方法名称 .

特殊属性: __dict__ 是属性字典; __class__ 是实例的类。

I/O对象(也称为文件对象)A file object 表示打开的文件。可以使用各种快捷方式创建文件对象: open() 内置功能,以及 os.popen() , os.fdopen() 和 makefile() socket对象的方法(也可能是由扩展模块提供的其他函数或方法)。

对象 sys.stdin , sys.stdout 和 sys.stderr 初始化为与解释器的标准输入、输出和错误流对应的文件对象;它们都以文本模式打开,因此遵循由 io.TextIOBase 抽象类。

内部类型解释器内部使用的一些类型向用户公开。它们的定义可能会随着解释器的未来版本而改变,但为了完整起见,这里会提到它们。

代码对象代码对象表示 byte-compiled 可执行python代码,或 bytecode .代码对象和函数对象之间的区别在于,函数对象包含对函数全局(定义它的模块)的显式引用,而代码对象不包含上下文;此外,默认参数值存储在函数对象中,而不是代码对象中(因为它们表示值calc在运行时进行。与函数对象不同,代码对象是不可变的,不包含对可变对象的引用(直接或间接)。

特殊只读属性: co_name 给出函数名; co_argcount 是位置参数的总数(包括仅位置参数和具有默认值的参数); co_posonlyargcount 是仅位置参数的数目(包括具有默认值的参数); co_kwonlyargcount 是仅关键字参数的数目(包括具有默认值的参数); co_nlocals 是函数使用的局部变量数(包括参数); co_varnames 是一个包含局部变量名称的元组(从参数名称开始); co_cellvars 是一个包含被嵌套函数引用的局部变量名称的元组; co_freevars 是包含自由变量名称的元组; co_code 表示字节码指令序列的字符串; co_consts 是一个包含字节码使用的文本的元组; co_names 是一个包含字节码使用的名称的元组; co_filename 是编译代码的文件名; co_firstlineno 是函数的第一个行号; co_lnotab 是一个字符串,用于编码从字节码偏移量到行号的映射(有关详细信息,请参阅解释器的源代码); co_stacksize 是所需的堆栈大小; co_flags 是一个整数,它为解释器编码多个标志。

以下标志位是为 co_flags 钻头 0x04 如果函数使用 *arguments 语法接受任意数量的位置参数;位 0x08 如果函数使用 **keywords 接受任意关键字参数的语法;位 0x20 如果函数是生成器,则设置。

将来的功能声明 (from __future__ import division )还使用位 co_flags 要指示代码对象是否在启用特定功能的情况下编译:bit 0x2000 如果函数是在启用未来除法的情况下编译的,则设置;位 0x10 和 0x1000 在早期版本的python中使用。

其他位 co_flags 保留供内部使用。

如果代码对象表示函数,则 co_consts 是函数的文档字符串,或者 None 如果未定义。

框架对象帧对象表示执行帧。它们可能出现在回溯对象中(见下文),也会传递给已注册的跟踪函数。

特殊只读属性: f_back 指向上一个堆栈帧(朝向调用方),或 None 如果这是底层堆栈框架; f_code 是在该帧中执行的代码对象; f_locals 是用来查找局部变量的字典; f_globals 用于全局变量; f_builtins 用于内置(内部)名称; f_lasti 给出精确的指令(这是代码对象的字节码字符串的索引)。

特殊可写属性: f_trace ,如果不是 None ,是在代码执行期间为各种事件调用的函数(这由调试器使用)。通常情况下,每个新震源测线都会触发一个事件-可通过设置禁用此功能。 f_trace_lines 到 False .

启动位置 may 允许通过设置请求每个操作码事件 f_trace_opcodes 到 True . 注意,如果跟踪函数引发的异常转义到被跟踪的函数,这可能导致未定义的解释程序行为。

f_lineno 是帧的当前行号---从跟踪函数中写入该行号将跳转到给定行(仅适用于最底端的帧)。调试程序可以通过写入f_lineno来实现跳转命令(也称为set next语句)。

框架对象支持一种方法:

frame.clear()¶

此方法清除对由帧保存的局部变量的所有引用。此外,如果框架属于一个生成器,则生成器是最终确定的。这有助于打破涉及帧对象的引用循环(例如,在捕获异常并存储其跟踪以供以后使用时)。

RuntimeError 如果帧当前正在执行,则引发。

3.4 新版功能.

回溯对象回溯对象表示异常的堆栈跟踪。当发生异常时,将隐式创建回溯对象,也可以通过调用 types.TracebackType .

对于隐式创建的回溯,当搜索异常处理程序释放执行堆栈时,在每个未释放级别上,在当前回溯前面插入一个回溯对象。当输入异常处理程序时,堆栈跟踪对程序可用。(见章节) 这个 try 陈述 )作为返回的元组的第三项可访问。 sys.exc_info() 和作为 __traceback__ 捕获的异常的属性。

当程序不包含合适的处理程序时,堆栈跟踪将被写入(格式良好的)标准错误流;如果解释器是交互式的,那么它也可以作为 sys.last_traceback .

对于显式创建的跟踪,由跟踪的创建者决定 tb_next 属性应链接以形成完整的堆栈跟踪。

特殊只读属性: tb_frame 指向当前级别的执行框架; tb_lineno 给出异常发生的行号; tb_lasti 指示精确指令。如果异常发生在 try 语句没有匹配的except子句或finally子句。

特殊可写属性: tb_next 是堆栈跟踪中的下一个级别(朝向发生异常的帧),或者 None 如果没有下一级。

在 3.7 版更改:现在可以从python代码显式地实例化回溯对象,并且 tb_next 可以更新现有实例的属性。

切片对象切片对象用于表示 __getitem__() 方法。它们也是由内置的 slice() 功能。

特殊只读属性: start 是下限; stop 是上限; step 是阶跃值;每个都是 None 如果省略。这些属性可以有任何类型。

切片对象支持一种方法:

slice.indices(self, length)¶

此方法采用单个整数参数 长度 并计算有关切片对象将描述的切片的信息(如果应用于 长度 项目。它返回三个整数的元组;分别是 开始 和 stop 指数与 step 或者跨步长度。丢失或越界索引的处理方式与常规切片一致。

静态方法对象静态方法对象提供了一种将函数对象转换为上述方法对象的方法。静态方法对象是任何其他对象的封装,通常是用户定义的方法对象。当从类或类实例中检索静态方法对象时,实际返回的对象是封装的对象,不需要进行任何进一步的转换。静态方法对象本身不是可调用的,尽管它们封装的对象通常是可调用的。静态方法对象由内置的 staticmethod() 构造函数。

类方法对象类方法对象和静态方法对象一样,是围绕另一个对象的封装器,它改变了从类和类实例中检索该对象的方式。在“用户定义的方法”下,上面描述了类方法对象在此类检索中的行为。类方法对象由内置的 classmethod() 构造函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值