内置函数
基于python3.9.6
选取部分常用的内置函数作为笔记,完整的可以在官方文档中查阅
https://docs.python.org/zh-cn/3/library/functions.html
abs(x)
返回绝对值,参数可以是整数、浮点数或任何实现了 abs() 的对象。复数返回模。
all(iterable)
迭代器中所有对象为真值,则返回True。
any(iterable)
迭代器中其中一个对象为真值,返回True
bool([x])
x根据真值测试过程,返回一个布尔值。布尔类是int的子类,其他类不能继承自他。
class bytearray([source[, encoding[, errors]]])
返回一个新的byte数组,是可变序列。其中不同的source类型有不同的初始化方式:
- 如果是一个 string,您必须提供 encoding 参数(errors 参数仍是可选的);bytearray() 会使用 str.encode() 方法来将 string 转变成 bytes。
- 如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。
- 如果是一个遵循 缓冲区接口 的对象,该对象的只读缓冲区将被用来初始化字节数组。
- 如果是一个 iterable 可迭代对象,它的元素的范围必须是 0 <= x < 256 的整数,它会被用作数组的初始内容。
class bytes([source[, encoding[, errors]]])
和bytearray的唯一不同是,返回值是不可变序列。
callable(object)
如果参数object是可调用的就返回True,否则返回False。其中有一些注意点:
- 返回True,调用也可能失败
- 返回False,调用肯定失败
- 类是可调用的,会返回它的实例
- 如果实例所属的类有__call__()方法,则这个实例是可调用的
@classmethod
把方法封装成类方法,一个类方法把类自己作为第一个实参。如果在其子类中调用,子类对象会被作为隐含的第一个参数传入。
类方法与Java中的静态方法不同。
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
@staticmethod
将方法转为静态方法,不会接收隐式的第一个参数,类似Java的静态方法。
某些情况下需要从类主体引用函数并且您希望避免自动转换为实例方法。对于这些情况,请使用此语法:
class C:
builtin_open = staticmethod(open)
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
可以将source编译成代码或AST对象,代码对象可以被exec()或eval()执行。
delattr(object, name)
实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象允许(什么叫允许?),该函数将删除指定的属性。
dir([object])
如果没有实参,则返回当前本地作用域中的名称列表。如果有实参,它会尝试返回该对象的有效属性列表。
对不同对象的不同行为:
- 如果对象是模块对象,则列表包含模块的属性名称。
- 如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类的属性。
- 否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有基类的属性。
enumerate(iterable, start=0)
返回一个元组,包含计数器和迭代器获得得值
filter(function, iterable)
遍历迭代器元素,由function返回值为真的元素构成一个新的迭代器对象作为返回。相当于
(item for item in iterable if function(item))
如果function=None,则迭代器中所有返回假的元素会被移除。相当于
(item for item in iterable if item)
float([x])
x转换为浮点数,字符串不区分大小写,可以使用科学记数法、“inf”、“Inf”、“INFINITY”、“iNfINity” 都可以表示正无穷大。
getattr(object, name[, default])
返回对象命名属性的值。
如果属性不存在返回default,没有提供default就报错
hasattr(object, name)
如果字符串是对象的属性之一的名称,则返回 True,否则返回 False。
globals()
返回表示当前全局符号表的字典(在函数或方法中,不是调用它的模块,而是定义它的模块)。
id(object)
返回对象的“标识值”。在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的 id() 值。
如果是CPython将返回对象的内存地址
input([prompt])
如果prompt存在则写入标准输出,并从标准输入中读取一行返回,如果读取到EOF则报错。
isinstance(object, classinfo)
如果参数 object 是参数 classinfo 的实例或者是其 (直接、间接或 虚拟) 子类则返回 True。
如果 classinfo 是类型对象元组(或由其他此类元组递归组成的元组),那么如果 object 是其中任何一个类型的实例就返回 True。
如果 classinfo 既不是类型,也不是类型元组或类型元组的元组,则抛出异常。
issubclass(class, classinfo)
如果 class 是 classinfo 的 (直接、间接或 虚拟) 子类则返回 True。类会被视作其自身的子类。
*iter(object[, sentinel])
返回一个 iterator 对象。根据是否存在第二个实参,第一个实参的解释是非常不同的。
- 如果没有第二个实参,object必须可迭代或支持序列协议(有 getitem() 方法,且数字参数从 0 开始)
- 如果有第二个实参 sentinel,那么 object 必须是可调用的对象。这种情况下生成的迭代器,每次迭代调用它的 next() 方法时都会不带实参地调用 object;如果返回的结果是 sentinel 则触发 StopIteration,否则返回调用结果。
第二种形式的应用,构建块读取器
# 从二进制数据库文件中读取固定宽度的块,直至到达文件的末尾:
from functools import partial
with open('mydata.db', 'rb') as f:
for block in iter(partial(f.read, 64), b''):
process_block(block)
map(function, iterable, ...)
返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器。
如果传入了额外的 iterable 参数,function 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。
当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束。
max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的,key 实参指定排序函数用的参数。
next(iterator[, default])
通过调用 iterator 的 next() 方法获取下一个元素。如果迭代器耗尽,则返回给定的 default,如果没有默认值则触发 StopIteration。
class object
返回object对象,由于 object 没有 dict,因此无法将任意属性赋给 object 的实例。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
- file 是一个 path-like object
- errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误
- newline 控制 universal newlines 模式如何生效(它仅适用于文本模式)。它可以是 None,'',' ',' ' 和 ' '。
- 如果 closefd 是 False 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态。如果给出文件名则 closefd 必须为 True (默认值)
- 可以通过传递可调用的 opener 来使用自定义开启器。opener 必须返回一个打开的文件描述符。
class property(fget=None, fset=None, fdel=None, doc=None)
一个典型的用法是定义一个托管属性 x。
如果c是C的实例,c.x 将调用getter,c.x = value 将调用setter, del c.x 将调用deleter。
class C:
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
@property
这个例子与上面的写法效果相同
class C:
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
reversed(seq)
返回一个反向的迭代器,seq必须是实现了__reversed__()方法的对象或支持序列协议。
round(number[, ndigits])
返回 number 舍入到小数点后 ndigits 位精度的值。 如果 ndigits 被省略或为 None,则返回最接近输入值的整数。
sorted(iterable, *, key=None, reverse=False)
根据 iterable 中的项返回一个新的已排序列表。
super([type[, object-or-type]])
返回一个代理对象,它会将方法调用委托给 type 的父类或兄弟类。
- object-or-type 确定用于搜索的 method resolution order。搜索会从 type参数之后的类开始。
class type(object)
class type(name, bases, dict, **kwds)
传入一个参数时,返回值是一个 type 对象
传入三个参数时,返回一个新的 type 对象。
- bases 元组包含基类
- dict包含属性
传入三个参数的例子
class X:
a = 1
# 与上面写法效果一样
X = type('X', (), dict(a=1))
vars([object])
返回模块、类、实例或任何其它具有dict属性的对象的dict 属性。
zip(*iterables)
创建一个聚合了来自每个可迭代对象中的元素的迭代器。
当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。
**import**(name, globals=None, locals=None, fromlist=(), level=0)
此函数会由 import 语句发起调用。它可以修改import语句的语义,但强烈不建议这么做。
使用导入钩子 (参见 PEP 302) 通常更容易实现同样的目标
- 该函数会导入 name 模块
- level 指定是使用绝对还是相对导入。0 (默认值) 意味着仅执行绝对导入。 level 为正数值表示相对于模块调用 import() 的目录,将要搜索的父目录层数