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__()进行遍历。
abs(x)
返回一个数的绝对值。 参数可以是整数、浮点数或任何实现了 __abs__() 的对象。 如果参数是一个复数,则返回它的模。
这个的示例代码就不给了。
什么叫可迭代对象?列表、元组、字典和集合就是典型的可迭代对象,这些对象都包含方法 __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)
运行结果如下:
什么叫可迭代对象?列表、元组、字典和集合就是典型的可迭代对象,这些对象都包含方法 __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)
运行结果如下:
函数ascii()返回任何对象(字符串、元组、列表等)的可读版本,有点类似于把对象强制转换为ASCII码字符串,它会将非ASCII字符替换为转义字符。
上面这句话不太好理解,看一个示例代码就知道了。
示例代码如下:
x1 = ascii('My name is Ståle')
print(x1)
x2 = ascii([77, 88, 'swh'])
print(x2)
运行结果如下:
这里要注意x1中的“\xe5”是怎么回事?那是因为在ASCII码中没有字符å ,所以将其替换成了 \xe5
另外, 我们看到字符串的前后的引号也被转换成了字符。
示例代码如下:
x1 = bin(10)
print(x1)
运行结果如下:
关于函数bool(),请参见我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/125439660
这个函数是3.7 版之后才有的,使用频率也不高,暂时不做过多介绍。
函数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。
如果指定的对象是可调用的,则返回 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
运行结果如下:
函数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个函数。
函数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]]])
参数意义如下:
复数是Python中数值类型的一种。可以用函数complex()通过指定复数的实部和虚部来得到复数。
示例代码如下:
z1 = complex(7, 8)
print(z1)
运行结果如下:
语法如下:
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)
运行结果如下:
函数dict()的详情请参见博文 https://blog.csdn.net/wenhao_ir/article/details/125412774 的“01-附2”
函数dir()的详情请参见博文 https://blog.csdn.net/wenhao_ir/article/details/125421060
示例代码如下:
result_1 = divmod(5, 2)
运行结果如下:
关于函数enumerate()的详细介绍,请参见我的另一篇博文:https://blog.csdn.net/wenhao_ir/article/details/125443427
详见对函数compile()的介绍,具体来说是这篇博文中的第11个。
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
什么?字符串也可以转换成浮点数,是的,你没看错,看下面的示例你就知道了。
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
关于函数format(),我已在博文https://blog.csdn.net/wenhao_ir/article/details/125390532中详细介绍过,这里就不再重复介绍了。
函数frozenset()用于由原可迭代对象返回一个被冻结的可迭代对象,处于冻结状态的可迭代对象不能添加或删除任何元素。
示例代码如下:
list1 = ['Google', 'CSDN', 'tencent', 1997, 1999, 1998]
list2 = frozenset(list1)
list2[0] = 'facebook'
运行结果如下:
示例代码如下:
class A(object):
bar = 1
a1 = A()
b1 = getattr(a1, 'bar')
运行结果如下:
如果您想设置对象的属性值,可以用函数setattr()来设置哦!函数setattr()见本篇博文第56个函数
globals() 函数会以字典类型返回当前位置的全部全局变量。
示例代码如下:
str1 = 'suwenhao'
int1 = 1990
list1 = [1, 2, 3]
global_variable = globals()
运行结果如下:
函数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') # 没有该属性
运行结果如下:
示例代码如下:
hash1 = hash('swh')
hash2 = hash(2487872782)
将上面的代码运行两次,结果分别如下:
第一次的运行结果:
第二次运行的结果:
从上面两次的运行结果我们可以看出,一个字符串的hash值并不是唯一的,整数的hash值还是其本身。
示例代码如下:
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方法的帮助
的运行结果如下:
示例代码如下:
hex1 = hex(10)
运行结果如下:
注意:函数hex()返回的是一个字符串对象。
示例代码如下:
str1 = 'CSDN'
id1 = id(str1)
运行结果如下:
示例代码如下:
str1 = input("input:")
运行结果如下:
第一次运行(输入字符串):
第二次运行(输入数字)
从第二次的运行结果我们可以看出,输入的数字也被当成字符串处理了。不过不要紧,我们可以用函数float()或函数int()将字符串型数字转化为float型和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()在将浮点数转换为整数时,对于小数部分是直接舍弃处理的,而不是四舍五入。
示例代码如下:
a = 2
bool1 = isinstance(a, int)
bool2 = isinstance(a, str)
bool3 = isinstance(a, (str, int, list)) # 只要是元组中的一个就返回True
运行结果如下:
语法如下:
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)
运行结果如下:
这个函数用于生成可迭代对象的迭代器对象。以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 则触发 StopIteration,从而停止迭代,否则返回调用结果.。
适合 iter() 的第二种形式的应用之一是构建块读取器。 例如,从二进制数据库文件中读取固定宽度的块,直至到达文件的末尾,这种情况下的示例如下:
from functools import partial
with open('mydata.db', 'rb') as f:
for block in iter(partial(f.read, 64), 'b'):
process_block(block)
上面的函数partial()会被不带参数的迭代下去,直到其返回值为’b’才停止迭代。
再回头来说第一种情况,使用函数iter()和函数next()对列表进行迭代的示例代码如下:
x = iter(["apple", "banana", "cherry"])
print(next(x))
print(next(x))
print(next(x))
运行结果如下:
这个在前面关于字符串、列表、元组、字典、集合的介绍时已经介绍过了,详情见下面的链接:
https://blog.csdn.net/wenhao_ir/article/details/125396412(这篇博文中的第14-3点中用到了len()测量字符串长度)
https://blog.csdn.net/wenhao_ir/article/details/125400072
https://blog.csdn.net/wenhao_ir/article/details/125407815
https://blog.csdn.net/wenhao_ir/article/details/125412774
https://blog.csdn.net/wenhao_ir/article/details/125424671
所以这里就不再举例了。
示例代码如下:
tup1 = ('Google', 'Taobao', 'CSDN', 555)
list1 = list(tup1)
str1 = "Hello World"
list2 = list(str1)
运行结果如下:
相关函数:
62-函数tuple():把可迭代对象转换为元组
locals() 函数会以字典类型返回当前位置的全部局部变量。
示例代码如下:
def fun1(arg): # 两个局部变量:arg、z
z = 1
print(locals())
fun1(6)
运行结果如下:
map() 函数会根据提供的函数对指定序列做映射。它的第一个参数和list的方法sort()、filter()函数的第一个参数使用类似。
sort()方法的详细介绍见博文 https://blog.csdn.net/wenhao_ir/article/details/125406092
filter()函数上面已经介绍过了。
示例代码一如下:
def square(x): # 计算平方数
return x ** 2
iter1 = map(square, [1, 2, 3, 4, 5])
list1 = list(iter1)
运行结果如下:
示例代码二如下(匿名函数):
iter1 = map(lambda x: x ** 3, [1, 2, 3, 4, 5])
list1 = list(iter1)
运行结果如下:
这个函数在之前对字符串、列表、元组的介绍中均有提及,在字符串中它是作为字符类的方法出现的,不过它也可作用于字符串对象。
下面给一个综合性的示例代码。
str1 = 'abcdef'
max_str1 = max(str1)
list1 = [10, 11, 12, 13]
max_list1 = max(list1)
tup1 = (20, 21, 22, 25)
max_tupl1 = max(tup1)
set1 = {50, 51, 52, 53}
max_set1 = max(set1)
运行结果如下:
所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,然后可以按字节进行查看。
示例代码如下:
v = memoryview(bytearray("abcefg", 'utf-8'))
v_01 = v[1]
v_02 = v[2]
运行结果如下:
个人感觉在Pycharm-IDE中这个作用不是很大,因为我在IDE中可以很方便的查看对象的内存情况。
函数min()与第40个max()的使用一模一样,只是它返回的是最小值,所以这里就不再介绍,也不给示例代码了。
函数next()在介绍35-函数iter()时已经介绍过了,这里就不再介绍了。
object() 函数返回一个空对象。
您不能向这个对象添加新的属性或方法,这个函数不接受任何实参。
这个对象是所有类的基础,它拥有所有类默认的内置属性和方法。
示例代码如下:
x = object()
运行结果如下:
函数oct()将一个整数转换成 8 进制字符串,8 进制以 0o 作为前缀表示。
示例代码如下:
str1 = oct(10)
运行果如下:
open()函数用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:文件对象使用完后,一定要调用close()函数关闭文件。
open()函数常用的形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode='r')
完整的语法格式如下:
pen(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file—文件的路径或名称。
mode—文件打开模式,其具体内容如下:
补充说明:
mode 是一个可选字符串,用于指定打开文件的模式。
默认值是 ‘r’ ,与 ‘rt’ 同义,这意味着它以文本模式打开并读取文件。
其他常见模式有:写入 ‘w’ 、排它性创建 ‘x’ 、追加写 ‘a’(在 一些 Unix 系统上,无论当前的文件指针在什么位置,所有 写入都会追加到文件末尾)。
接下来继续介绍函数open()的其它参数。
在文本模式,如果 encoding 没有指定,则根据平台来决定使用的编码:使用 locale.getpreferredencoding(False) 来获取本地编码。
要读取和写入原始字节,请使用二进制模式并不要指定 encoding。
以二进制模式打开的文件(包括 mode 参数中的 ‘b’ )返回的内容为 bytes 对象,不进行任何解码。在文本模式下(默认情况下,或者在 mode 参数中包含 ‘t’ )时,文件内容返回为 str ,首先使用指定的 encoding (如果给定)或者使用平台默认的的字节编码解码。
模式 ‘w+’ 与 ‘w+b’ 将打开文件并清空内容。
模式 ‘r+’ 与 ‘r+b’ 将打开文件并不清空内容。
buffering—这个参数用于设置缓冲。
encoding— encoding 是用于解码或编码文件的编码的名称,一般使用utf8。这应该只在文本模式下使用。默认编码是依赖于平台的(而不管 locale.getpreferredencoding() 返回何值),但可以使用任何Python支持的 text encoding 。有关支持的编码列表,请参阅Pythoncodecs 模块。
errors–是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可以使用各种标准错误处理程序(列在 错误处理方案 ),但是使用 codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括:
newline—控制文件的换行,即 universal newlines 模式如何生效(它仅适用于文本模式)。它可以是 None,‘’,‘\n’,‘\r’ 和 ‘\r\n’。它的工作原理如下:
从流中读取输入时,如果 newline 为 None,则启用通用换行模式。输入中的行可以以 ‘\n’,‘\r’ 或 ‘\r\n’ 结尾,这些行被翻译成 ‘\n’ 在返回呼叫者之前。如果它是 ‘’,则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。
将输出写入流时,如果 newline 为 None,则写入的任何 ‘\n’ 字符都将转换为系统默认行分隔符 os.linesep。如果 newline 是 ‘’ 或 ‘\n’,则不进行翻译。如果 newline 是任何其他合法值,则写入的任何 ‘\n’ 字符将被转换为给定的字符串。
closefd—如果 closefd 是 False 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态。如果给出文件名则 closefd 必须为 True (默认值),否则将引发错误。
opener—可以通过传递可调用的 opener 来使用自定义开启器。然后通过使用参数( file,flags )调用 opener 获得文件对象的基础文件描述符。 opener 必须返回一个打开的文件描述符(使用 os.open as opener 时与传递 None 的效果相同)。
ord() 函数是chr() 函数对于 8 位的 ASCII 字符串)的配对函数[函数chr()见本文的第10个],它以一个字符串(Unicode 字符)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值。
示例代码如下:
int1 = ord('a')
char1 = chr(int1)
运行结果如下:
语法如下:
pow(x, y[, z])
计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z
示例代码如下:
int1 = pow(2, 3)
int2 = pow(2, 3, 6)
运行结果如下:
函数print()的详细介绍见我的另一篇博文:https://blog.csdn.net/wenhao_ir/article/details/125390532
函数property()通常用于获取、设置、删除类的某个属性。
函数property()的语法如下:
class property([fget[, fset[, fdel[, doc]]]])
参数:
fget – -获取属性值的函数(函数的功能并不一定是真正的去获取属性值,看了示例代码就容易理解这一点)
fset —设置属性值的函数(函数的功能并不一定是真正的去设置属性值,看了示例代码就容易理解这一点)
fdel — 删除属性值函数(函数的功能并不一定是真正的去删除属性,看了示例代码就容易理解这一点)
doc — 属性描述信息。
示例代码如下:
class C(object):
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.")
如果 c 是 C 的实例化, 则
c.x 将调用getx(),
c.x = value 将调用setx()
del c.x 将调用delx()
如果给定 doc 参数,其将成为这个属性值的 docstring,否则 property 函数就会复制 fget 函数的 docstring(如果有的话)。
继续完善示例代码如下:
# 博主微信/QQ 2487872782
# 有问题可以联系博主交流
class C(object):
def __init__(self):
self._x = 100
self._y = 200
def getx(self):
print('called getx and x={}'.format(self._x))
def setx(self, value):
self._x = value
print('called setx and x={}'.format(self._x))
def delx(self):
del self._x
print('called delx')
def gety(self):
print('called gety and y={}'.format(self._y))
def sety(self, value):
self._y = value
print('called sety and y={}'.format(self._y))
def dely(self):
del self._y
print('called dely')
x = property(getx, setx, delx, "I'm the 'x' property.")
y = property(gety, sety, dely, "I'm the 'y' property.")
c = C()
c.x
c.x = 12
del c.x
c.y
help(c)
运行结果如下:
上面的代码中我定义了两个与函数property()有关的属性名,分别为x和y,并且我还为x和y设置了三个函数,以x为例,这三个函数分别通过
c.x
c.x = 12
del c.x
来调用。
注意:
Python3 range() 函数返回的是一个可迭代对象,而不是列表对象,可以用函数list()将其转化为列表。
Python2 range() 函数返回的则是列表。
语法如下(有两种形式):
range(stop)
range(start, stop[, step])
start—计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop:—计数到 stop 结束,但不包括 stop。例如:range(0, 5是[0, 1, 2, 3, 4],注意没有包括5。
step—步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
示例代码如下:
rang1 = range(5)
list1 = list(rang1)
for i in range(1, 4, 1):
print(i)
运行结果如下:
示例代码如下:
dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
str1 = repr(dict1)
print(str1)
list1 = ['Google', 'CSDN', 1997, 1999]
str2 = repr(list1)
print(str2)
运行结果如下:
示例代码如下:
内置函数str()和这个函数的功能差不多,函数str()的介绍见本博文第59点。
示例代码如下:
str1 = 'abcdefg'
str1_reverse = reversed(str1)
str1_reverse_list = list(str1_reverse)
list1 = [1, 2, 3, 4, 5]
list1_reverse = reversed(list1)
list1_reverse_list = list(list1_reverse)
tup1 = ('A', 'B', 'C', 'D')
tup1_reverse = reversed(tup1)
tup1_reverse_list = list(tup1_reverse)
运行结果如下图所示:
语法如下:
round( x [, n] )
参数意义:
x — 待处理的浮点数。
n — 表示需保留的小数位数,默认值为0,即不保留小数部分。
注意:它做的是五舍六入的近似运算,而不是四舍五入,大家看下面的示例代码就知道了。
示例代码如下:
print("round(70.3) : ", round(70.3))
print("round(70.4) : ", round(70.4))
print("round(70.5) : ", round(70.5))
print("round(70.6) : ", round(70.6))
print("round(70.7) : ", round(70.7))
print("round(80.23, 1) : ", round(80.23, 1))
print("round(80.24, 1) : ", round(80.24, 1))
print("round(80.25, 1) : ", round(80.25, 1))
print("round(80.26, 1) : ", round(80.26, 1))
print("round(80.27, 1) : ", round(80.27, 1))
运行结果如下:
函数set()在博文 https://blog.csdn.net/wenhao_ir/article/details/125424671 中已经介绍过了,这里就不再重复介绍了。
函数setattr()对应函数getattr(),用于设置属性值,该属性不一定是存在的哦。
语法如下:
setattr(object, name, value)
参数意义如下:
object – 对象。
name – 字符串,对象属性。
value – 属性值
示例代码如下:
class A(object):
bar = 1
a = A()
bar1 = getattr(a, 'bar') # 获取属性bar的值
setattr(a, 'bar', 5) # 设置对象a的属性bar的值
bar2 = getattr(a, 'bar') # 再次获取属性bar的值
运行结果如下:
slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。
语法如下:
有两种形式:
slice(stop)
slice(start, stop[, step])
参数意义:
start – 起始索引值
stop – 结束索引值
step – 索引间距
示例代码如下:
list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
slice1 = slice(5)
list_sub1 = list1[slice1]
slice2 = slice(1, 8, 2)
list_sub2 = list1[slice2]
运行结果如下:
这里分析下list_sub2是怎么得到的?
索引区间为[1, 8) 注意是左闭右开区间。
索引步长为2,则有效索引值为1、1+2=3、3+2=5、5+2=7
索引值1、3、5、7对应的元素值分别为:10、40、60、80
所以list_sub2为[20, 40, 60, 80]
当然,我们一般都不用这个切片对象,而直接写出切片表达式,
即我们通常把语句:
slice2 = slice(1, 8, 2)
list_sub2 = list1[slice2]
写成:
list_sub2 = list1[1:8:2]
函数sorted()的用法和列表中的方法sort()的使用方法和功能是基本一样的。
不同之处在于函数sorted()可以对所有的可迭代对象元素进行排序,并且它会返回一个新的列表。而列表中的方法sort()它只能针对列表,并且对原列表对象进行操作。
所以这里就不再对函数sorted()进行介绍了,大家可参考我的另一篇博文https://blog.csdn.net/wenhao_ir/article/details/125400072中第16点对方法sort()的介绍。
内置函数repr()和这个函数的功能差不多,函数repr()的介绍见本博文第52点。
示例代码如下:
dict1 = {'name': 'suwenhao', 'likes': 'reading', 123: 456}
str1 = str(dict1)
print(str1)
list1 = ['Google', 'CSDN', 1997, 1999]
str2 = str(list1)
print(str2)
运行结果如下:
内置函数repr()和这个函数的功能差不多,函数repr()的介绍见本博文第52点。
语法如下:
sum(iterable, start)
参数意义如下:
iterable—必需。需求和的可迭代对象(序列)。
start—可选。添加到返回值的值。
示例代码如下:
resutl1 = sum([0, 1, 2])
result2 = sum((2, 3, 4), 1) # 元组对象计算总和后再加1
result3 = sum([0, 1, 2, 3, 4], 2) # 列表计算总和后再加2
运行结果如下:
关于这个函数的详细介绍,可以查看我的另一篇博文:https://blog.csdn.net/wenhao_ir/article/details/125472478
示例代码如下:
list1 = ['Google', 'Taobao', 'Runoob', 'Baidu']
tuple1 = tuple(list1)
运行结果如下:
相关函数:
37-函数list():用于将元组或字符串转换为列表
函数type()有两种语法:
type(object)
type(name, bases, dict)
第一种语法返回对象的类型,第二种语法返回新的类型对象。
第一种语法是常用的,第二种语法很少用,所以下面的示例代码只给第一种语法的示例代码:
type1 = type(1)
type2 = type([1, 2, 'swh'])
type3 = type({0: 'zero'})
x = 1
bool1 = type(x) == int # 判断类型是否为int型
运行结果如下:
从上面的运行结果可以看出,函数type()返回的并不是字符串,而是type对象,type对象属于“Special Variables”。
并通,还可以用关系运算符“==”对类型进行判断哦。
示例代码如下:
class Person:
name = "Bill"
age = 19
country = "USA"
x1 = dir(Person) # 返回类的所有属性
x2 = vars(Person) # 返回类的__dic__属性
运行结果如下:
资料上都说是返回对象的__dic__ 属性,但是我实测却返回不了,如下:
class Person:
name = "Bill"
age = 19
country = "USA"
object1 = Person()
x1 = vars(object1)
运行结果如下:
可能那些资料中的对象也把类认为是对象吧~在我的脑海里,认为类的实例化才叫对象。
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
示例代码如下:
a = [1, 2, 3]
b = [4, 5, 6]
c = [11, 12, 13, 14, 15]
zip1 = zip(a, b)
list1 = list(zip1)
zip2 = zip(a, c)
list2 = list(zip2)
运行结果如下:
利用 * 号操作符,可以将元组解压为列表,示例代码如下:
tup1 = ((1, 4), (2, 5), (3, 6))
a1, b1 = zip(*tup1)
运行结果如下:
虽然关键词import可以实现同样的功能,但是通常我们在程序的开头使用关键词import进入导入操作,如果我们想在程序中部,可以使用内置函数__import__(),这样会使程序看来顺眼。
其语法如下:
__import__(name[, globals[, locals[, fromlist[, level]]]])
可选参数意义暂时不作探究。
示例代码如下:
my_script.py中的代码如下:
print('Successfully imported my_ script!')
print('my_script execution completed!')
001-32-内置函数.py中的代码如下:
list1 = [1, 2, 3]
__import__('my_script')
list2 = [7, 8, 9]
运行结果如下:
参考资料:https://blog.csdn.net/wenhao_ir/article/details/125100220