Python标准库---六、内置函数(P-K-R-S-T-U)

上一篇文章: Python标准库---五、内置函数(P-K-R)
下一篇文章: Python标准库---七、内置函数(V-W-X-Y-Z)

内置函数:

clipboard.png

57. class set([iterable])

返回一个新的 set 对象,能够选择带有从 iterable 获取的元素。 set 是一个内置类型。 请查看 set 和 集合类型 --- set, frozenset 获取关于这个类的文档。

有关其余容器请参看内置的 frozenset, list, tuple 和 dict 类,以及 collections 模块。编程

58. setattr(object, name, value)

此函数与 getattr() 两相对应。 其参数为一个对象、一个字符串和一个任意值。 字符串指定一个现有属性或者新增属性。 函数会将值赋给该属性,只要对象容许这种操做。 例如,setattr(x, 'foobar', 123) 等价于 x.foobar = 123。

59. class slice(stop)

class slice(start, stop[, step])segmentfault

返回一个表示由 range(start, stop, step) 所指定索引集的 slice 对象。 其中 start 和 step 参数默认为 None。 切片对象具备仅会返回对应参数值(或其默认值)的只读数据属性 start, stop 和 step。 它们没有其余的显式功能;不过它们会被 NumPy 以及其余第三方扩展所使用。 切片对象也会在使用扩展索引语法时被生成。 例如: a[start:stop:step] 或 a[start:stop, i]。 请参阅 itertools.islice() 了解返回迭代器的一种替代版本。

60. sorted(iterable, *, key=None, reverse=False)

根据 iterable 中的项返回一个新的已排序列表。

具备两个可选参数,它们都必须指定为关键字参数。编程语言

key 指定带有单个参数的函数,用于从 iterable 的每一个元素中提取用于比较的键 (例如 key=str.lower)。 默认值为 None (直接比较元素)。函数

reverse 为一个布尔值。 若是设为 True,则每一个列表元素将按反向顺序比较进行排序。ui

使用 functools.cmp_to_key() 可将老式的 cmp 函数转换为 key 函数。spa

内置的 sorted() 确保是稳定的。 若是一个排序确保不会改变比较结果相等的元素的相对顺序就称其为稳定的 --- 这有利于进行多重排序(例如先按部门、再按薪级排序)。设计

有关排序示例和简要排序教程,请参阅 排序指南 。代理

61. @staticmethod

将方法转换为静态方法。

静态方法不会接收隐式的第一个参数。要声明一个静态方法,请使用此语法code

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...
@staticmethod 这样的形式称为函数的 decorator -- 详情参阅 函数定义。
静态方法的调用能够在类上进行 (例如 C.f()) 也能够在实例上进行 (例如 C().f())。

Python中的静态方法与Java或C ++中的静态方法相似。另请参阅 classmethod() ,用于建立备用类构造函数的变体。对象

像全部装饰器同样,也能够像常规函数同样调用 staticmethod ,并对其结果执行某些操做。好比某些状况下须要从类主体引用函数而且您但愿避免自动转换为实例方法。对于这些状况,请使用此语法:

class C:
    builtin_open = staticmethod(open)
想了解更多有关静态方法的信息,请参阅 标准类型层级结构 。

62. class str(object='')

class str(object=b'', encoding='utf-8', errors='strict')

返回一个 str 版本的 object 。有关详细信息,请参阅 str() 。

str 是内置字符串 class 。更多关于字符串的信息查看 文本序列类型 --- str。

63. sum(iterable[, start])

从 start 开始自左向右对 iterable 中的项求和并返回总计值。 start 默认为 0。 iterable 的项一般为数字,开始值则不容许为字符串。

对某些用例来讲,存在 sum() 的更好替代。 拼接字符串序列的更好更快方式是调用 ''.join(sequence)。 要以扩展精度对浮点值求和,请参阅 math.fsum()。 要拼接一系列可迭代对象,请考虑使用 itertools.chain()。

64. super([type[, object-or-type]])

返回一个代理对象,它会将方法调用委托给 type 指定的父类或兄弟类。 这对于访问已在类中被重载的继承方法颇有用。 搜索顺序与 getattr() 所使用的相同,只是 type 指定的类型自己会被跳过。

type 的 mro 属性列出了 getattr() 和 super() 所使用的方法解析顺序。 该属性是动态的,能够在继承层级结构更新的时候任意改变。

若是省略第二个参数,则返回的超类对象是未绑定的。 若是第二个参数为一个对象,则 isinstance(obj, type) 必须为真值。 若是第二个参数为一个类型,则 issubclass(type2, type) 必须为真值(这适用于类方法)。

super 有两个典型用例。

  • 在具备单继承的类层级结构中,super 可用来引用父类而没必要显式地指定它们的名称,从而令代码更易维护。 这种用法与其余编程语言中 super 的用法很是类似。
  • 第二个用例是在动态执行环境中支持协做多重继承。 此用例为 Python 所独有,在静态编译语言或仅支持单继承的语言中是不存在的。 这使得实现“菱形图”成为可能,在这时会有多个基类实现相同的方法。 好的设计强制要求这种方法在每一个状况下具备相同的调用签名(由于调用顺序是在运行时肯定的,也由于该顺序要适应类层级结构的更改,还由于该顺序可能包含在运行时以前未知的兄弟类)。
对于以上两个用例,典型的超类调用看起来是这样的:
class C(B):
    def method(self, arg):
        super().method(arg)    
        # This does the same thing as:
        # super(C, self).method(arg)
请注意 super() 是做为显式加点属性查找的绑定过程的一部分来实现的,例如 super().__getitem__(name)。 它作到这一点是经过实现本身的 __getattribute__() 方法,这样就能以可预测的顺序搜索类,而且支持协做多重继承。 对应地,super() 在像 super()[name] 这样使用语句或操做符进行隐式查找时则未被定义。

还要注意的是,除了零个参数的形式之外,super() 并不限于在方法内部傅和。 两个参数的形式明确指定参数并进行相应的引用。 零个参数的形式仅适用于类定义内部,由于编译器须要填入必要的细节以正确地检索到被定义的类,还须要为普通访问当前实例。

对于有关如何使用 super() 来如何设计协做类的实用建议,请参阅 使用 super() 的指南。

65. tuple([iterable])

虽然被称为函数,但 tuple 其实是一个不可变的序列类型,参见在 元组 与 序列类型 --- list, tuple, range 中的文档说明。

66. class type(object)

class type(name, bases, dict)

传入一个参数时,返回 object 的类型。 返回值是一个 type 对象,一般与 object.__class__ 所返回的对象相同。

推荐使用 isinstance() 内置函数来检测对象的类型,由于它会考虑子类的状况。

传入三个参数时,返回一个新的 type 对象。 这在本质上是 class 语句的一种动态形式。 name 字符串即类名而且会成为 name 属性;bases 元组列出基类而且会成为 bases 属性;而 dict 字典为包含类主体定义的命名空间而且会被复制到一个标准字典成为 dict 属性。 例如,下面两条语句会建立相同的 type 对象:

>>> class X:
...     a = 1
...
>>> X = type('X', (object,), dict(a=1))
另请参阅 类型对象。

在 3.6 版更改: type 的子类若是未重载 type.__new__,将再也不能使用一个参数的形式来获取对象的类型。

上一篇文章: Python标准库---五、内置函数(P-K-R)
下一篇文章: Python标准库---七、内置函数(V-W-X-Y-Z)
相关文章
相关标签/搜索