笔者原创,文章转载需注明,如果喜欢请点赞+关注,感谢支持!本文为Python函数学习系列第三篇,python的常用内置函数。
由于篇幅问题,目前官网基于python3.7.7一共包含69个内置函数,共分为3个章节进行讲解,每个章节包含23个内置函数,同时会重点讲解常用的的内置函数。
python官网关于内置函数的说明:https://docs.python.org/zh-cn/3.7/library/functions.html
目录
Python常用的内置函数
什么是内置函数?
其实内置函数就是python自己内置、定义的一些函数。
比如我们常用的print()打印,intput()输出等等内置函数一样,pyhton官方给你设定好的函数,可以直接拿来用。
目前python官方一共给出69个内置函数。下面是python官方给出的所有已知最新的内置函数:传送门
下面的内容就根据字母顺序将常用的内置函数进行详细说明:
1. aba()
abs
(x)返回一个数的绝对值。实参可以是整数或浮点数。如果实参是一个复数,返回它的模。
说明:aba()绝对值函数,返回int类型。
举例:
a = -1
print(abs(a))
print(type(abs(a)))
1
<class 'int'>
2. all()
说明:all
()函数用来判断所有元素为真,返回True。
all
(iterable)如果 iterable 的所有元素为真(或迭代器为空),返回
True
。等价于:def all(iterable): for element in iterable: if not element: return False return True
any
(iterable)如果 iterable 的任一元素为真则返回
True
。 如果迭代器为空,返回False
。 等价于:def any(iterable): for element in iterable: if element: return True return False
使用场景:all()函数一般应用场景在需要判断多个条件时,用all()函数。
举例:
list = '1,2,3'
print(all(list))
print(type(all(list)))
True
<class 'bool'>
3.any
()
说明:all函数是判断所有元素,而any是判断任一元素为真则返回True。
any(iterable)
如果 iterable 的任一元素为真则返回 True。 如果迭代器为空,返回 False。 等价于:
def any(iterable):
for element in iterable:
if element:
return True
return False
举例:
list = []
print(any(list))
list = [1]
print(any(list))
print(type(any(list)))
False
True
<class 'bool'>
4.ascii
()
说明:aascii() 函数会将所有非 ascii 字符替换为转义字符,并返回任何对象(字符串,元组,列表等)的可读版本。
就像函数
repr()
,返回一个对象可打印的字符串,但是repr()
返回的字符串中非 ASCII 编码的字符,会使用\x
、\u
和\U
来转义。生成的字符串和 Python 2 的repr()
返回的结果相似。
print(ascii('中国'))
print(type(ascii('中国')))
'\u4e2d\u56fd'
<class 'str'>
5.bin
()
说明:bin()函数用于将一个整数转变为一个前缀为“0b”的二进制字符串。
将一个整数转变为一个前缀为“0b”的二进制字符串。结果是一个合法的 Python 表达式。如果 x 不是 Python 的
int
对象,那它需要定义__index__()
方法返回一个整数。一些例子:>>> bin(3) '0b11' >>> bin(-10) '-0b1010'
如果不一定需要前缀“0b”,还可以使用如下的方法。
>>> format(14, '#b'), format(14, 'b') ('0b1110', '1110') >>> f'{14:#b}', f'{14:b}' ('0b1110', '1110')
举例:
print(bin(99))
print(type(bin(99)))
0b1100011
<class 'str'>
备注:需要注意bin函数转换后返回值是字符串格式。
6.bool()
说明:bool()函数作用就是布尔类型转换。
bool()返回一个布尔值,
True
或者False
。 x 使用标准的 真值测试过程 来转换。如果 x 是假的或者被省略,返回False
;其他情况返回True
。bool
类是int
的子类(参见 数字类型 --- int, float, complex)。其他类不能继承自它。它只有False
和True
两个实例(参见 布尔值)。在 3.7 版更改: x 现在只能作为位置参数。
举例:
print(bool())
print(bool(''))
print(bool(0))
print(bool(1))
print(type(bool(1)))
False
False
False
True
<class 'bool'>
备注:布尔类型转换是最常用的数据类型转换的内置函数之一,常用在while循环,等需要返回值为bool值的情况。
7.breakpoint()
说明:breakpoint
是 Python 3.7 中新增加的内置函数,breakpoint
(*args, **kws)此函数会在调用时将你陷入调试器中。
breakpoint
(*args, **kws)此函数会在调用时将你陷入调试器中。具体来说,它调用sys.breakpointhook()
,直接传递args
和kws
。默认情况下,sys.breakpointhook()
调用pdb.set_trace()
且没有参数。在这种情况下,它纯粹是一个便利函数,因此您不必显式导入pdb
且键入尽可能少的代码即可进入调试器。但是,sys.breakpointhook()
可以设置为其他一些函数并被breakpoint()
自动调用,以允许进入你想用的调试器。
备注:暂时没有应用场景,后续在具体的应用场景中再详细展开研究。
8.bytearray()
说明:bytearray() 方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。
class
bytearray
([source[, encoding[, errors]]])返回一个新的 bytes 数组。
bytearray
类是一个可变序列,包含范围为 0 <= x < 256 的整数。它有可变序列大部分常见的方法,见 可变序列类型 的描述;同时有bytes
类型的大部分方法,参见 bytes 和 bytearray 操作。可选形参 source 可以用不同的方式来初始化数组:
如果是一个 string,您必须提供 encoding 参数(errors 参数仍是可选的);
bytearray()
会使用str.encode()
方法来将 string 转变成 bytes。如果是一个 integer,会初始化大小为该数字的数组,并使用 null 字节填充。
如果是一个符合 buffer 接口的对象,该对象的只读 buffer 会用来初始化字节数组。
如果是一个 iterable 可迭代对象,它的元素的范围必须是
0 <= x < 256
的整数,它会被用作数组的初始内容。如果没有实参,则创建大小为 0 的数组。
举例:
print(bytearray([1,2,3]))
bytearray(b'\x01\x02\x03')
9.bytes()
说明:bytes 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。
class
bytes
([source[, encoding[, errors]]])返回一个新的“bytes”对象, 是一个不可变序列,包含范围为
0 <= x < 256
的整数。bytes
是bytearray
的不可变版本 - 它有其中不改变序列的方法和相同的索引、切片操作。因此,构造函数的实参和
bytearray()
相同。字节对象还可以用字面值创建,参见 字符串和字节串字面值。
另见 二进制序列类型 --- bytes, bytearray, memoryview,bytes 对象 和 bytes 和 bytearray 操作。
举例:
print(bytes([1,2,3]))
print(type(bytes([1,2,3])))
b'\x01\x02\x03'
<class 'bytes'>
备注:类和对象相关的内置函数会在之后的学习中再详细说明。
10.callable
()
说明:callable() 函数用于检查一个对象是否是可调用的。如果返回 True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。
对于函数、方法、lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True。
callable
(object)如果参数 object 是可调用的就返回
True
,否则返回False
。 如果返回True
,调用仍可能失败,但如果返回False
,则调用 object 将肯定不会成功。 请注意类是可调用的(调用类将返回一个新的实例);如果实例所属的类有__call__()
则它就是可调用的。3.2 新版功能: 这个函数一开始在 Python 3.0 被移除了,但在 Python 3.2 被重新加入。
举例:
print(callable(1))
print(callable(None))
False
False
备注:类和对象相关的内置函数会在之后的学习中再详细说明。
11.chr
()
说明:chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。返回值是当前整数对应的 ASCII 字符。
chr
(i)返回 Unicode 码位为整数 i 的字符的字符串格式。例如,
chr(97)
返回字符串'a'
,chr(8364)
返回字符串'€'
。这是ord()
的逆函数。实参的合法范围是 0 到 1,114,111(16 进制表示是 0x10FFFF)。如果 i 超过这个范围,会触发
ValueError
异常。
@
classmethod
把一个方法封装成类方法。
一个类方法把类自己作为第一个实参,就像一个实例方法把实例自己作为第一个实参。请用以下习惯来声明类方法:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
print(chr(0x31))
print(chr(65))
print(type(chr(60)))
1
A
<class 'str'>
12.classmethod
说明:classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。
@classmethod
这样的形式称为函数的 decorator -- 详情参阅 函数定义。类方法的调用可以在类上进行 (例如
C.f()
) 也可以在实例上进行 (例如C().f()
)。 其所属类以外的类实例会被忽略。 如果类方法在其所属类的派生类上调用,则该派生类对象会被作为隐含的第一个参数被传入。类方法与 C++ 或 Java 中的静态方法不同。 如果你需要后者,请参阅
staticmethod()
。想了解更多有关类方法的信息,请参阅 标准类型层级结构 。
备注:一般用作声明类属性,类和对象相关的内置函数会在之后的学习中再详细说明。
@classmethod
13.compile()
说明:compile() 函数将一个字符串编译为字节代码。
compile
(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)将 source 编译成代码或 AST 对象。代码对象可以被
exec()
或eval()
执行。source 可以是常规的字符串、字节字符串,或者 AST 对象。参见ast
模块的文档了解如何使用 AST 对象。filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经常会使用
'<string>'
)。mode 实参指定了编译代码必须用的模式。如果 source 是语句序列,可以是
'exec'
;如果是单一表达式,可以是'eval'
;如果是单个交互式语句,可以是'single'
。(在最后一种情况下,如果表达式执行结果不是None
将会被打印出来。)可选参数 flags 和 dont_inherit 控制在编译 source 时要用到哪个 future 语句。 如果两者都未提供(或都为零)则会使用调用
compile()
的代码中有效的 future 语句来编译代码。 如果给出了 flags 参数但没有 dont_inherit (或是为零) 则 flags 参数所指定的 以及那些无论如何都有效的 future 语句会被使用。 如果 dont_inherit 为一个非零整数,则只使用 flags 参数 -- 在调用外围有效的 future 语句将被忽略。Future 语句使用比特位来指定,多个语句可以通过按位或来指定。具体特性的比特位可以通过
__future__
模块中的_Feature
类的实例的compiler_flag
属性来获得。optimize 实参指定编译器的优化级别;默认值
-1
选择与解释器的-O
选项相同的优化级别。显式级别为0
(没有优化;__debug__
为真)、1
(断言被删除,__debug__
为假)或2
(文档字符串也被删除)。如果编译的源码不合法,此函数会触发
SyntaxError
异常;如果源码包含 null 字节,则会触发ValueError
异常。如果您想分析 Python 代码的 AST 表示,请参阅
ast.parse()
。注解
在
'single'
或'eval'
模式编译多行代码字符串时,输入必须以至少一个换行符结尾。 这使code
模块更容易检测语句的完整性。警告
在将足够大或者足够复杂的字符串编译成 AST 对象时,Python 解释器有可以因为 Python AST 编译器的栈深度限制而崩溃。
在 3.2 版更改: 允许使用 Windows 和 Mac 的换行符。在
'exec'
模式不再需要以换行符结尾。增加了 optimize 形参。在 3.5 版更改: 之前 source 中包含 null 字节的话会触发
TypeError
异常。
举例:
str = 'for i in range(0,10): print(i)'
print(compile(str,'','exec'))
<code object <module> at 0x0000027982A81F60, file "", line 1>
14.complex()
说明:complex() 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
class
complex
([real[, imag]])返回值为 real + imag*1j 的复数,或将字符串或数字转换为复数。如果第一个形参是字符串,则它被解释为一个复数,并且函数调用时必须没有第二个形参。第二个形参不能是字符串。每个实参都可以是任意的数值类型(包括复数)。如果省略了 imag,则默认值为零,构造函数会像
int
和float
一样进行数值转换。如果两个实参都省略,则返回0j
。注解
当从字符串转换时,字符串在
+
或-
的周围必须不能有空格。例如complex('1+2j')
是合法的,但complex('1 + 2j')
会触发ValueError
异常。数字类型 --- int, float, complex 描述了复数类型。
在 3.6 版更改: 您可以使用下划线将代码文字中的数字进行分组。
举例:
print(complex(1,2))
(1+2j)
15.delattr
()
说明:delattr 函数用于删除属性。
delattr
(object, name)
setattr()
相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象允许,该函数将删除指定的属性。例如delattr(x, 'foobar')
等价于del x.foobar
。
备注:类和对象在python学习中还未涉及到,所以暂时不深入研究,后续在逐步补充。
16. dict
()
说明:dict() 函数用于创建一个字典。
class
dict
(**kwarg)class
dict
(mapping, **kwarg)class
dict
(iterable, **kwarg)创建一个新的字典。
dict
对象是一个字典类。参见dict
和 映射类型 --- dict 了解这个类。其他容器类型,请参见内置的
list
、set
和tuple
类,以及collections
模块。
举例:
a = dict()
print(a)
print(type(a))
{}
<class 'dict'>
17.dir()
说明:dir()函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
dir
([object])如果没有实参,则返回当前本地作用域中的名称列表。如果有实参,它会尝试返回该对象的有效属性列表。
如果对象有一个名为
__dir__()
的方法,那么该方法将被调用,并且必须返回一个属性列表。这允许实现自定义__getattr__()
或__getattribute__()
函数的对象能够自定义dir()
来报告它们的属性。如果对象不提供
__dir__()
,这个函数会尝试从对象已定义的__dict__
属性和类型对象收集信息。结果列表并不总是完整的,如果对象有自定义__getattr__()
,那结果可能不准确。默认的
dir()
机制对不同类型的对象行为不同,它会试图返回最相关而不是最全的信息:
如果对象是模块对象,则列表包含模块的属性名称。
如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类的属性。
否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有基类的属性。
返回的列表按字母表排序。例如:
>>> import struct
>>> dir() # show the names in the module namespace
['__builtins__', '__name__', 'struct']
>>> dir(struct) # show the names in the struct module
['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
'__initializing__', '__loader__', '__name__', '__package__',
'_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from']
>>> class Shape:
... def __dir__(self):
... return ['area', 'perimeter', 'location']
>>> s = Shape()
>>> dir(s)
['area', 'location', 'perimeter']
注解
因为
dir()
主要是为了便于在交互式时使用,所以它会试图返回人们感兴趣的名字集合,而不是试图保证结果的严格性或一致性,它具体的行为也可能在不同版本之间改变。例如,当实参是一个类时,metaclass 的属性不包含在结果列表中。
备注:暂时没有应用场景,后续在具体的应用场景中再详细展开研究。
18.divmod
()
说明:python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
divmod
(a, b)它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于混合操作数类型,适用双目算术运算符的规则。对于整数,结果和
(a // b, a % b)
一致。对于浮点数,结果是(q, a % b)
,q 通常是math.floor(a / b)
但可能会比 1 小。在任何情况下,q * b + a % b
和 a 基本相等;如果a % b
非零,它的符号和 b 一样,并且0 <= abs(a % b) < abs(b)
。
举例:
print(divmod(200,13))
(15, 5)
19.enumerate
()
说明:enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
enumerate
(iterable, start=0)返回一个枚举对象。iterable 必须是一个序列,或 iterator,或其他支持迭代的对象。
enumerate()
返回的迭代器的__next__()
方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0)和通过迭代 iterable 获得的值。
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
等价于:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
举例:
seq = ['one', 'two', 'three']
i = 0
for element in seq:
print(i,seq[i])
i += 1
0 one
1 two
2 three
20.eval
()
说明:eval() 函数用来执行一个字符串表达式,并返回表达式的值。
eval
(expression[, globals[, locals]])实参是一个字符串,以及可选的 globals 和 locals。globals 实参必须是一个字典。locals 可以是任何映射对象。
expression 参数会作为一个 Python 表达式(从技术上说是一个条件列表)被解析并求值,使用 globals 和 locals 字典作为全局和局部命名空间。 如果 globals 字典存在且不包含以
__builtins__
为键的值,则会在解析 expression 之前插入以此为键的对内置模块builtins
的字典的引用。 这意味着 expression 通常具有对标准builtins
模块的完全访问权限且受限的环境会被传播。 如果省略 locals 字典则其默认值为 globals 字典。 如果两个字典同时省略,表达式会在eval()
被调用的环境中执行。 返回值为表达式求值的结果。 语法错误将作为异常被报告。 例如:
>>> x = 1
>>> eval('x+1')
2
这个函数也可以用来执行任何代码对象(如
compile()
创建的)。这种情况下,参数是代码对象,而不是字符串。如果编译该对象时的 mode 实参是'exec'
那么eval()
返回值为None
。提示:
exec()
函数支持动态执行语句。globals()
和locals()
函数各自返回当前的全局和本地字典,因此您可以将它们传递给eval()
或exec()
来使用。另外可以参阅
ast.literal_eval()
,该函数可以安全执行仅包含文字的表达式字符串。
举例:
a=1
g={'a':20}
print(eval("a+1",g))
21
21.exec
()
说明:exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。
exec
(object[, globals[, locals]])这个函数支持动态执行 Python 代码。object 必须是字符串或者代码对象。如果是字符串,那么该字符串将被解析为一系列 Python 语句并执行(除非发生语法错误)。1 如果是代码对象,它将被直接执行。在任何情况下,被执行的代码都需要和文件输入一样是有效的(见参考手册中关于文件输入的章节)。请注意即使在传递给
exec()
函数的代码的上下文中,return
和yield
语句也不能在函数定义之外使用。该函数返回值是None
。无论哪种情况,如果省略了可选参数,代码将在当前范围内执行。如果提供了 globals 参数,就必须是字典类型,而且会被用作全局和本地变量。如果同时提供了 globals 和 locals 参数,它们分别被用作全局和本地变量。如果提供了 locals 参数,则它可以是任何映射型的对象。请记住在模块层级,全局和本地变量是相同的字典。如果 exec 有两个不同的 globals 和 locals 对象,代码就像嵌入在类定义中一样执行。
如果 globals 字典不包含
__builtins__
键值,则将为该键插入对内建builtins
模块字典的引用。因此,在将执行的代码传递给exec()
之前,可以通过将自己的__builtins__
字典插入到 globals 中来控制可以使用哪些内置代码。注解
内置
globals()
和locals()
函数各自返回当前的全局和本地字典,因此可以将它们传递给exec()
的第二个和第三个实参。注解
默认情况下,locals 的行为如下面
locals()
函数描述的一样:不要试图改变默认的 locals 字典。如果您想在exec()
函数返回时知道代码对 locals 的变动,请明确地传递 locals 字典。
备注:暂时没有应用场景,后续在具体的应用场景中再详细展开研究。
22.filter
()
说明:filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter
(function, iterable)用 iterable 中函数 function 返回真的那些元素,构建一个新的迭代器。iterable 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 function 是
None
,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。请注意,
filter(function, iterable)
相当于一个生成器表达式,当 function 不是None
的时候为(item for item in iterable if function(item))
;function 是None
的时候为(item for item in iterable if item)
。请参阅
itertools.filterfalse()
了解,只有 function 返回 false 时才选取 iterable 中元素的补充函数。
l = [x for x in range(0, 10)]
print(list(filter(None, l)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
23.float
()
说明:数据类型转换为float()浮点数类型。
class float([x])
返回从数字或字符串 x 生成的浮点数。
如果实参是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,之前也可以有空格。可选的符号有 '+' 和 '-' ; '+' 对创建的值没有影响。实参也可以是 NaN(非数字)、正负无穷大的字符串。确切地说,除去首尾的空格后,输入必须遵循以下语法:
sign ::= "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::=
floatnumber
|infinity
|nan
numeric_string ::= [sign
]numeric_value
这里,
floatnumber
是 Python 浮点数的字符串形式,详见 浮点数字面值。字母大小写都可以,例如,“inf”、“Inf”、“INFINITY”、“iNfINity” 都可以表示正无穷大。另一方面,如果实参是整数或浮点数,则返回具有相同值(在 Python 浮点精度范围内)的浮点数。如果实参在 Python 浮点精度范围外,则会触发
OverflowError
。对于一般的 Python 对象
x
,float(x)
指派给x.__float__()
。如果没有实参,则返回
0.0
。示例:
>>>
>>> float('+1.23')
1.23
>>> float(' -12345\n')
-12345.0
>>> float('1e-003')
0.001
>>> float('+1E6')
1000000.0
>>> float('-Infinity')
-inf
数字类型 --- int, float, complex 描述了浮点类型。
在 3.6 版更改: 您可以使用下划线将代码文字中的数字进行分组。
在 3.7 版更改: x 现在只能作为位置参数。
举例:
num = 100
print(float(num))
print(type(float(num)))
100.0
<class 'float'>
以上便是《Python学习13:内置函数(一)》所有内容,下一篇为内置函数(二)讲解更多内置函数的定义和用法。
目前《Python学习》专题正在不断更新,原创不易,如果喜欢请点赞和关注,谢谢大家的支持!
获得更多免费的学习资料请添加微信公众号——风起怨江南,有任何问题可以随时和我交流沟通。