python学习之最常用的内置函数
Python 内置函数总共有70余个(通常把内置类也统称为内置函数),覆盖面广,功能强大。不过,对于初学者在初级阶段,掌握下面几个函数是当务之急。
(1) 控制台输出函数 print()
print() 应该是每一个初学者首先接触到的函数,也一定用得非常熟练。我们知道,print() 函数一次可以打印多个对象,打印对象可以是任意类型。此外,print() 函数还有4个默认参数,灵活运用,方能得心应手。
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
- objects – 零个或多个输出对象。输出多个对象时,需要用半角逗号分隔
- sep – 用来间隔多个对象,默认值是一个空格
- end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串
- file – 要写入的文件对象
- flush – 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新
(2) 控制台输入函数 input()
input() 函数常用于程序执行过程中接收用户输入的参数,用户敲击回车键,函数即返回用户输入的字符串,但不包括回车符。因input() 函数本身具备IO阻塞的功能,所以也可用于作为程序调试断点来使用。input() 函数没有默认参数,但接受一个字符串作为输入提示信息。
>>> nums = input('请输入3个整数,中间以空格分割,回车结束输入:')
请输入3个整数,中间以空格分割,回车结束输入:3 4 5 6
>>> print(nums) # 请注意,nums是一个字符串,不是整数
3 4 5 6
>>> [int(item) for item in nums.split()] # 这样才可以把输入的字符串变成3个整数
[3, 4, 5, 6]
(3) 可迭代对象长度函数 len()
len() 函数也是初学者接触最早、最容易记住的函数之一,len 是 length 简写,该函数用于返回列表、元祖、字典、字符串等可迭代对象的长度(或称为元素数量)。至于什么是可迭代对象,暂时可以不用深究,随着学习的深入,会逐步理解的。
(4) 序列生成器函数 range()
通常我们是在学习 for 循环的时候,认识的 range() 函数。最初(py2时代),range() 函数返回的是一个列表,因为太耗内存,所以进入新时代(py3时代)之后,range() 函数不再返回列表,而是range类了。
(5) 格式化输出函数 format()
虽然这里提到的是 format() 函数,但大多数情况下,我更喜欢用%去做格式化输出。读者可以通过下面的例子体会一下两种格式化方法的差异。
下面给出用%去做格式化输出的常用符号速查表。
符号 | 功能 |
---|---|
%d,%i | 转换为带符号的十进制形式的整数 |
%o | 转换为带符号的八进制形式的整数 |
%x,%X | 转换为带符号的十六进制形式的整数 |
%e | 转化为科学计数法表示的浮点数(e 小写) |
%E | 转化为科学计数法表示的浮点数(E 大写) |
%f,%F | 转化为十进制形式的浮点数 |
%g | 智能选择使用 %f 或 %e 格式 |
%G | 智能选择使用 %F 或 %E 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 将变量或表达式转换为字符串 |
%s | 使用 str() 将变量或表达式转换为字符串 |
(6) 排序函数 sorted()
排序是比较常见的需求。排序函数 sorted() 不会改变原有的数据结构,而是返回一个新的排序结果。这一点,和列表类的 sort() 方法不同。列表类的 sort() 方法改变了列表自身,且无返回值。
>>> sorted([3,2,7,1,5]) # 一维列表排序
[1, 2, 3, 5, 7]
>>> sorted([3,2,7,1,5], reverse=True) # 一维列表排序,逆序输出
[7, 5, 3, 2, 1]
(7) 文件操作函数 open()
文件读写是程序员最基本的技能之一,必须熟练掌握。好在Python的文件操作非常简单,很容易上手。通常文件读写时,不管正常还是非正常结束,一定要关闭文件——这需要捕获异常并进行处理。为了简化代码,使之更加优雅,我习惯使用 with - as 来操作文件。
打开文件有多种模式,详见下表:
mode参数 | 参数概述 | 参数功能 |
---|---|---|
r / rt | 只读模式(默认) | 只能获取文本内容,不能写入 |
rb | 二进制只读模式 | 使用二进制获取文本内容, 通常用于获取图片视频等非文本 |
r+ | 读写追加 | 用于读写,文件指针放在内容开头 |
rb+ | 二进制读写追加 | 用于二进制读写,文件指针放在内容开头 |
w / wt | 只写模式 | 用于写入内容,会将原本的内容覆盖 |
w+ | 只写追加 | 用于写入内容,会在原本的内容之后续写 |
wb | 二进制只写模式 | 用于写入二进制内容,会将原本的内容覆盖 通常用于写入图片视频等非文本 |
wb+ | 二进制只写追加 | 用于写入二进制内容,会在原本的内容之后续写 通常用于写入图片视频等非文本 |
a / at | 读写追加 | 用于读取或写入内容,写入会在原本的内容之后续写 没有文本则创建文本 |
ab | 二进制读写追加 | 用于读取或写入二进制内容,写入会在原本内容之后续写 没有文本则创建文本 |
a+ | 读写追加 | 用于读取或写入内容,写入会在原本的内容之后续写 没有文本则创建文本 |
ab+ | 二进制读写追加 | 用于读取或写入二进制内容,写入会在原本内容之后续写 没有文本则创建文本 |
下面的例子,演示了如何将数据写入到csv文件,又如何读出csv文件中的数据。
>>> with open(r'd:\csv_data.csv', 'w') as fp: # 写csv文件for line in [[0.468,0.975,0.446],[0.718,0.826,0.359]]:ok = fp.write('%s\n'%','.join([str(item) for item in line]))>>> with open(r'd:\csv_data.csv', 'r') as fp:print(fp.read())0.468,0.975,0.446
0.468,0.975,0.446>>> with open(r'd:\csv_data.csv', 'r') as fp: # 读csv文件for line in fp.readlines():print('%s - %s - %s'%tuple(line.strip().split(',')))0.468 - 0.975 - 0.446
0.468 - 0.975 - 0.446
12345678910111213141516
(8) 类型相关函数 type()/isinstance()
对于初学者来说,运行代码时出了问题是最头疼的事儿:根本不知道发生了什么,又该从何处入手。如果不是缩进错误,或者找不到模块一类的初级错误,那么,查看变量的类型,也许是最值得一试的调试方法。type() 就是用于查看对象类型的函数。
>>> type(5)
<class 'int'>
>>> type('ssdf')
<class 'str'>
>>> type([])
<class 'list'>
>>> type(print)
<class 'builtin_function_or_method'>
>>> type(range(5))
<class 'range'>
12345678910
但是,有很多同学了解了 type() 之后,喜欢用它来做类型判断,这是不正确的。用于类型判断的函数是isinstance(),请看:
>>> a = [3,4,5]
>>> b = ('x', 'y')
>>> c = dict()
>>> d = 'python'
>>> isinstance(a, list)
True
>>> isinstance(b, list)
False
>>> isinstance(c, (dict,str))
True
>>> isinstance(d, (dict,str))
True
>>> isinstance(b, (dict,str))
False
1234567891011121314
(9) 特殊功能函数 enumerate()/zip()/map()/chr()/ord()
遍历列表、字符串等可迭代对象的时候,如果我们想同时得到元素的索引序号,enumerate() 函数就可以派上用场了。enumerate() 返回可迭代对象的索引和元素组成的元组的迭代对象,所以,不用担心该函数的效率和资源消耗情况,放心使用好了。
>>> for index, item in enumerate([True, False, None]):print(index, item, sep='->')0->True
1->False
2->None
>>> for index, item in enumerate('xyz'):print(index, item, sep='->')0->x
1->y
2->z
123456789101112
zip() 函数也有一个经典的应用场景:同时遍历多个列表。
>>> a = ['x','y','z']
>>> b = [3,4,5]
>>> for k, v in zip(a,b):print(k, v, sep='->')x->3
y->4
z->5
12345678
map() 函数可以理解为对列表中的每一个元素做一次计算,这个计算由函数参数指定。这个作为参数的函数,可以是普通的函数,也可以是 lambda 匿名函数。我们以对列表中各元素开三次方为例,演示一下man() 函数的用法。
>>> def extract(x): # 开3次方return pow(x, 1/3)>>> result = map(extract, [7,8,9]) # 使用函数extract()对列表元素逐一开3次方,返回一个迭代对象
>>> list(result) # 将迭代对象转为list
[1.912931182772389, 2.0, 2.080083823051904]
>>> list(map(lambda x:pow(x, 1/3), [7,8,9])) # 使用lambda函数,更简洁
[1.912931182772389, 2.0, 2.080083823051904]
12345678
chr() 函数返回 ascii 编码值对应的字符,ord() 函数返回字符的 ascii 编码值, 二者是互逆的操作。
>>> chr(65)
'A'
>>> ord('Z')
90
>>> for i in range(26):print(chr(65+i), sep='', end='')ABCDEFGHIJKLMNOPQRSTUVWXYZ
12345678
(10) 数学函数 sum()/max()/min()/abs()/pow()/divmod()/round()
Python 内置的数学计算与统计函数不多,但基本够用。不过,如果你需要对数函数和三角函数的话,你恐怕得导入 manth 模块(标准模块)或者其他模块了(比如 numpy 等)。需要提醒大家的是,很多教科书说,做开方运算就得导入 manth 模块,其实,内置函数 pow() 是既可以乘方,也可以开方的。