Python3.9的69个内置函数(内建函数)介绍,并附简单明了的示例代码

Posted 昊虹图像算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3.9的69个内置函数(内建函数)介绍,并附简单明了的示例代码相关的知识,希望对你有一定的参考价值。

Python 解释器内置(内建)了很多函数,这篇博文对它们进行逐一介绍,博主觉得有必要给出示例代码的会给出示例代码。

声明:博主(昊虹图像算法)写这篇博文时,用的Python的版本号为3.9.10。

官方文档:https://docs.python.org/zh-cn/3.9/library/functions.html#built-in-functions

说明:官方文档里列出了14*5-1=59个内置函数,但博主认为classmethod、staticmethod、property这三个更像是定义类的三个关键字,故没在这篇博文中进行介绍,如果要看这三个的介绍,可参考我的另一篇博文,链接 https://blog.csdn.net/wenhao_ir/article/details/125383895

这篇博文中反复提到了可迭代对象的概论,那么什么是可迭代对象呢?
列表、元组、字典和集合就是典型的可迭代对象,这些对象都包含方法 __iter__() 或__next__()。可迭代对象的元素能够通过其内部的方法 __iter__() 或 __next__()进行遍历。

目录

01-函数abs():返回一个数的绝对值

abs(x)
返回一个数的绝对值。 参数可以是整数、浮点数或任何实现了 __abs__() 的对象。 如果参数是一个复数,则返回它的模。
这个的示例代码就不给了。

02-函数all():判断可迭代对象是否所有元素为True

什么叫可迭代对象?列表、元组、字典和集合就是典型的可迭代对象,这些对象都包含方法 __iter__() 和 __next__()。可迭代对象的元素能够通过其内部的方法 __iter__() 和 __next__()进行遍历。
那么元素对象满足什么条件为True呢?可参考我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/125439660

注意:按道理,空元组、空列表的布尔值为False,所以对于空元组、空列表,函数all()应该返回False才对,但事实并不是这样,对于空元组、空列表函数all()的返回值也为True,这一点要特别注意。
示例代码如下:

list1 = [1, 2, 3]
list2 = [-1, 2, 3]
list3 = [0, 2, 3]
list4 = []

bool1 = all(list1)
bool2 = all(list2)
bool3 = all(list3)
bool4 = all(list4)

运行结果如下:

03-函数any():判断可迭代对象是否有一个以上元素为True

什么叫可迭代对象?列表、元组、字典和集合就是典型的可迭代对象,这些对象都包含方法 __iter__() 和 __next__()。

any() 函数用于判断可迭代对象是否有一个以上元素为True,如果有一个为 True,则返回 True;如果全部为False,则返回 False。

那么元素对象满足什么条件为True呢?可参考我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/125439660

注意:对于函数any()而言,空元组、空列表返回值为False。

示例代码如下:

list1 = [0, '', False, None]
list2 = [-1, 2, 3]
list3 = [0, 2, 3]
list4 = []

bool1 = any(list1)
bool2 = any(list2)
bool3 = any(list3)
bool4 = any(list4)

运行结果如下:

04-函数ascii():返回任何对象(字符串、元组、列表等)的ASCII码打印(可读)版本

函数ascii()返回任何对象(字符串、元组、列表等)的可读版本,有点类似于把对象强制转换为ASCII码字符串,它会将非ASCII字符替换为转义字符。
上面这句话不太好理解,看一个示例代码就知道了。

示例代码如下:

x1 = ascii('My name is Ståle')
print(x1)

x2 = ascii([77, 88, 'swh'])
print(x2)

运行结果如下:


这里要注意x1中的“\\xe5”是怎么回事?那是因为在ASCII码中没有字符å ,所以将其替换成了 \\xe5
另外, 我们看到字符串的前后的引号也被转换成了字符。

05-函数bin():返回一个整数的二进制表示(这个二进制表示是字符串对象)

示例代码如下:

x1 = bin(10)
print(x1)

运行结果如下:

06-函数bool():返回对象的bool值(布尔值)

关于函数bool(),请参见我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/125439660

07-函数breakpoint():此函数在调用时将使程序陷入调试器中

这个函数是3.7 版之后才有的,使用频率也不高,暂时不做过多介绍。

08-函数bytearray():返回单字节数组

函数bytearray()的语法如下:

bytearray([source[, encoding[, errors]]])

参数介绍:
如果 source 为整数,则返回一个长度为 source 的初始化数组;
如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
如果 source 为可迭代类型,因为每个元素的存储空间只有一个字节,则元素必须为[0 ,255] 中的整数;
如果没有输入任何参数,默认就是初始化数组为0个元素。
示例代码如下:

bytearray0 = bytearray()
bytearray1 = bytearray(5)
bytearray2 = bytearray('suwenhao', 'utf-8')
bytearray3 = bytearray([65, 66, 67])

运行结果如下:

从上面的运行结果我们可以看出:
①长度为 source 的初始化数组的元素的默认值为\\x00
②显示是以ASCII码来显示其值的,所以bytearray3的三个数被显示为了大写的字母ABC。

09-函数callable():测试对象是否能被调用

如果指定的对象是可调用的,则返回 True,否则返回 False。
注意:如果函数callable()返回True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。
对于函数、方法、lambda 匿名函数、 类以及实现了 __call__ 方法的类实例, 它都会返回 True。
示例代码如下:

def add(a_p, b_p):
    return a_p + b_p


class A:
    def method(self):
        return 0


class B:
    def __call__(self):
        return 0


bool1 = callable(0)  # 对象0不可被调用,所以应该返回False

bool2 = callable(add)  # 函数add返回True

bool3 = callable(A)  # 类A返回True

a = A()
bool4 = callable(a)  # 类A的实例化对象a没有实现__call__,所以应该返回False

bool5 = callable(B)  # 类B返回True

b = B()
bool6 = callable(b)  # 类B的实例化对象b实现了__call__,所以应该返回True

运行结果如下:

10-函数chr():返回代表指定unicode码值的字符

函数chr( i )返回 Unicode 码位为整数 i 的字符的字符串格式。例如,chr(97) 返回字符串 ‘a’,chr(8364) 返回字符串 ‘€’。

i — 可以是 10 进制也可以是 16 进制的形式的数字,数字范围为 0 到 1,114,111 (16 进制为0x10FFFF)。

示例代码如下:

char1 = chr(97)
char2 = chr(8364)

运行结果如下:

另外,可用使用函数ord()返回字符的ASCII 数值或者Unicode数值,详情见本文的第47个函数。

11-函数compile():将字符串代码编译成可运行的代码对象

函数compile()的作用将字符串代码编译成可运行的代码对象。
看了上面这句话通常还是不知道它干了啥。没关系,看一下示例代码就知道了。
示例代码如下:

a1 = 188
x = compile('print(a1)', 'jhoij', 'eval')

eval(x)

运行结果如下:


从上面的示例代码我们可以看出,当对语句 print(a1) 执行了形式为eval的compile操作后,得到了对象x,此时用eval()函数调用对象x,就相当于执行了语句print(a1)。

那这样的操作有什么意义呢?
网上查到一个观点如下:
当执行字符串形式的代码时,每次都必须对这些代码进行字节编译处理。compile()函数提供了一次性字节代码预编译,以后每次调用的时候,都不用编译了。
但是博主(昊虹君)觉得这个说法有点问题,从上面的例子来看,每次运行这个脚本的时候还是会去执行一次compile()函数,那还是每次都去编译了啊,除非它的结果被缓存在某个地方。

compile()函数语法如下:

compile(source, filename, mode[, flags[, dont_inherit,[ optimize]]])

参数意义如下:

12-函数complex():通过指定复数的实部和虚部来得到复数

复数是Python中数值类型的一种。可以用函数complex()通过指定复数的实部和虚部来得到复数。
示例代码如下:

z1 = complex(7, 8)
print(z1)

运行结果如下:

13-函数delattr():从指定的对象中删除指定的属性属性或方法

语法如下:

delattr(object, name)

object – 对象。
name – 必须是对象的属性。
示例代码如下:

class Coordinate:
    x = 10
    y = -5
    z = 0


point1 = Coordinate()

print('x = ', point1.x)
print('y = ', point1.y)
print('z = ', point1.z)

delattr(Coordinate, 'z')

print('--删除 z 属性后--')
print('x = ', point1.x)
print('y = ', point1.y)

# 触发错误
print('z = ', point1.z)

运行结果如下:

14-函数dict():创建字典

函数dict()的详情请参见博文 https://blog.csdn.net/wenhao_ir/article/details/125412774 的“01-附2”

15-函数dir():查询一个类或一个对象有哪些属性(方法(成员函数)、变量))

函数dir()的详情请参见博文 https://blog.csdn.net/wenhao_ir/article/details/125421060

16-函数divmod():返回除法的商和余数

函数divmod()的语法如下:

divmod(a, b)

如果参数 a 与 参数 b 都是整数,函数返回的结果相当于 (a // b, a % b)。
如果其中一个参数为浮点数时,函数返回的结果相当于 (q, a % b),q 通常是 math.floor(a / b),函数会使 q * b + a % b近可能接近于a。
余数的符号与除数相同。
注意:当被除数和除数是异号的整数时,余数只有三个值,当能整除时,余数为0;当不能整除时,若除数为负数,余数为-1,若除数为正数,余数为1。

示例代码如下:

# 被除数和除数都是正数的情况
a1 = 13
b1 = 5
c01 = divmod(a1, b1)

# 被除数和除数都是负数的情况
a2 = -14
b2 = -5
c02 = divmod(a2, b2)

# 被除数是正数,除数是负数的情况
a3 = 14
b3 = -5
c03 = divmod(a3, b3)

# 被除数是负数,除数是正数的情况
a4 = -14
b4 = 5
c04 = divmod(a4, b4)

# 验证被除数是正数,除数是负数时,结果是否为-1
a5 = 23
b5 = -6
c05 = divmod(a5, b5)

# 验证被除数是负数,除数是正数时,结果是否为+1
a6 = -23
b6 = 6
c06 = divmod(a6, b6)

# 验证被除数是正数,除数是负数且能整除时,结果是否为0
a7 = -24
b7 = 6
c07 = divmod(a7, b7)

# 验证被除数是负数,除数是正数且能整除时,结果是否为0
a8 = -24
b8 = 6
c08 = divmod(a8, b8)

# 被除数是正的浮点数,除数是正的整数的情况
a9 = 5.3
b9 = 2
c09 = divmod(a9, b9)

# 被除数是负的浮点数,除数是负的整数的情况
a10 = -5.3
b10 = -2
c10 = divmod(a10, b10)

# 被除数是负的浮点数,除数是正的整数的情况
a11 = -5.3
b11 = 2
c11 = divmod(a11, b11)

# 被除数是正的浮点数,除数是负的整数的情况
a12 = 5.3
b12 = -2
c12 = divmod(a12, b12)

# 被除数是整数,除数是浮点数的情况
a13 = 6
b13 = -2.2
c13 = divmod(a13, b13)

# 被除数是浮点数,除数也是浮点数的情况
a14 = 6.8
b14 = -2.2
c14 = divmod(a14, b14)

运行结果如下:

17-函数enumerate():将可迭代对象转化为枚举对象

关于函数enumerate()的详细介绍,请参见我的另一篇博文:https://blog.csdn.net/wenhao_ir/article/details/125443427

18-函数eval():执行函数compile()后的代码对象

详见对函数compile()的介绍,具体来说是这篇博文中的第11个。

19-函数exec():执行函数compile()后的代码对象

20-函数filter():过滤掉可迭代对象中不符合条件的元素

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

示例代码如下:

def is_odd(n):
    return n % 2 == 1


tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)

运行结果如下:

这个函数与列表(list)的方法sort()的第一个参数key的使用挺类似的,详情见博文https://blog.csdn.net/wenhao_ir/article/details/125406092

21-函数float():将整数或字符串转换成浮点数

什么?字符串也可以转换成浮点数,是的,你没看错,看下面的示例你就知道了。

int1 = 112
str1 = '123'

float_1 = float(int1)
float_2 = float(str1)

运行结果如下:

从上面的运行结果我们可以看出,字符串’123’被转换成了浮点数123.0,这就是Python的灵活之处,同样的功能,在C++中则需要使用类stringstream来实现,详情见我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/124508457

22-函数format():字符串格式化函数

关于函数format(),我已在博文https://blog.csdn.net/wenhao_ir/article/details/125390532中详细介绍过,这里就不再重复介绍了。

23-函数frozenset():返回一个被冻结的可迭代对象

函数frozenset()用于由原可迭代对象返回一个被冻结的可迭代对象,处于冻结状态的可迭代对象不能添加或删除任何元素。
示例代码如下:

list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]

list2 = frozenset(list1)

list2[0] = 'facebook'

运行结果如下:

24-函数getattr():获取对象的某个属性的值

示例代码如下:

class A(object):
    bar = 1


a1 = A()
b1 = getattr(a1, 'bar')

运行结果如下:

如果您想设置对象的属性值,可以用函数setattr()来设置哦!函数setattr()见本篇博文第56个函数

25-函数globals():返回程序当前运行位置的所有全局变量

globals() 函数会以字典类型返回当前位置的全部全局变量。
示例代码如下:

str1 = 'suwenhao'
int1 = 1990
list1 = [1, 2, 3]

global_variable = globals()

运行结果如下:

26-函数hasattr():判断对象是否具有某属性

函数hasattr()的示例代码如下:

class Coordinate:
    x = 10
    y = -5
    z = 0


point1 = Coordinate()

bool1 = hasattr(point1, 'x')
bool2 = hasattr(point1, 'y')
bool3 = hasattr(point1, 'z')
bool4 = hasattr(point1, 'no')  # 没有该属性

运行结果如下:

27-函数hash():获取对象(通常为字符的哈希值

示例代码如下:

hash1 = hash('swh')
hash2 = hash(2487872782)

将上面的代码运行两次,结果分别如下:
第一次的运行结果:

第二次运行的结果:

从上面两次的运行结果我们可以看出,一个字符串的hash值并不是唯一的,整数的hash值还是其本身。

28-函数help():用于查看函数、类、对象等的说明

示例代码如下:

help('sys')   # 查看sys模块的帮助

help('str')  # 查看str类的帮助

a = [1, 2, 3]
help(a)  # 查看列表list的帮助

help(a.append)  # 查看list的append方法的帮助

下面两行代码

a = [1, 2, 3]

help(a.append)  # 查看list的append方法的帮助

的运行结果如下:

29-函数hex():返回一个数字的16进制表示

示例代码如下:

hex1 = hex(10)

运行结果如下:

注意:函数hex()返回的是一个字符串对象。

30-函数id():返回对象的id(内存地址)

示例代码如下:

str1 = 'CSDN'
id1 = id(str1)

运行结果如下:

31-函数input():接受输入数据(如来自键盘的输入),返回string类型

示例代码如下:

str1 = input("input:")

运行结果如下:
第一次运行(输入字符串):




第二次运行(输入数字)


从第二次的运行结果我们可以看出,输入的数字也被当成字符串处理了。不过不要紧,我们可以用函数float()或函数int()将字符串型数字转化为float型和int型嘛。

32-函数int():将浮点数或字符串转换为整数

语法如下:

int(x, base=10)

参数意义:
x – 字符串或数字。
base – 代表x为哪种进制的数,注意不是表示返回傎的进制

示例代码如下:

int1 = int(3.6)
int2 = int('20')
int3 = int('12', 16)  #16进制的12换算成10进制是18
int4 = int('0xa', 16)

运行结果如下:

从上面的运行结果可以看出,函数int()在将浮点数转换为整数时,对于小数部分是直接舍弃处理的,而不是四舍五入。

33-函数isinstance():判断一个对象是否是某个类的实例

示例代码如下:

a = 2
bool1 = isinstance(a, int)
bool2 = isinstance(a, str)
bool3 = isinstance(a, (str, int, list))  # 只要是元组中的一个就返回True

运行结果如下:

34-函数issubclass():判断某个类是否是另一个类的子类

语法如下:

issubclass(class1, class2)

如果 class1 是 class2 的子类返回 True,否则返回 False。
示例代码如下:

class A:
    pass


class B(A):
    pass


class C:
    pass


bool1 = issubclass(B, A)
bool2 = issubclass(B, C)

运行结果如下:

35-函数iter():用于生成可迭代对象的迭代器对象

这个函数用于生成可迭代对象的迭代器对象。以list对象为例,如果我们想通过迭代器遍历它,怎么操作呢?方法之一就是先生成其迭代器对象,然后用内置函数next()进行遍历操作。

内置函数next()的语法如下:

next(iterable[, default])

iterable – 可迭代对象
default – 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。

再看函数iter()的语法:

iter(object[, sentinel])

根据是否存在第二个实参,第一个实参的解释是非常不同的。
如果没有第二个实参,object 必须是支持迭代协议(有 __iter__() 方法)的集合对象(比如列表、元组、集合都是有 __iter__() 方法的,博文https://blog.csdn.net/wenhao_ir/article/details/125421060的第一个示例代码的运行结果便证明了这一点),或必须支持序列协议(有 __getitem__() 方法,且数字参数从 0 开始)。如果它不支持这些协议,会触发 TypeError。
如果有第二个实参 sentinel,那么 object 必须是可调用的对象。这种情况下生成的迭代器,每次迭代调用它的 __next__() 方法时都会不带实参地调用 object;如果返回的结果是 sentinel 则触发 StopIt

以上是关于Python3.9的69个内置函数(内建函数)介绍,并附简单明了的示例代码的主要内容,如果未能解决你的问题,请参考以下文章

Python3.9标准库math中的函数汇总介绍(53个函数和5个常数)

Python中的内建函数

03 Python的内置函数

Python中字典的内建函数用法是啥?

python的一些常用内置函数(内建函数)详解

python 内建函数 filter,map和reduce