版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章引言
为什么要写这样的一本书在《商业数据分析》课程的教学过程中,我们发现非常需要一本能够将Python基本语法,常见的数据挖掘和机器学习方法,以及典型的商业数据分析案例穿起来的书。本书的内容力求以一种简单的方式将基于Python的商业数据分析内容系统化的展现出来,同时也希望从“管理+技术”的交叉视角将商业数据分析全面完整的呈现给读者。本书的受众是什么这本书的受众对象是商学或是管理学等专业中对商业数据分析感兴趣的同学们。对于商学和管理学等社会科学专业的同学们而言,商业数据分析应该是一个“管理+技术”的问题,这意味着不能将商业数据分析等同于单纯的技术问题,而要以数据分析是要为企业管理服务的思维来看待。本书在介绍Python基本语法和常见数据分析方法之后,重点补充了几个具有商业情景的案例。通过对这些案例的学习能够帮助商科背景的同学们将自己专业所学的各种管理理论融入到商业数据分析情景当中,做到商业数据分析最终为管理而服务。本书的内容都包含什么基础篇围绕Python的基本语法展开,精选了一些在商业数据分析中常用的Python基本语法,并精选了一些常用第三方模块的代表性方法进行了介绍。方法篇侧重于从数据挖掘和机器学习的角度进行介绍,并以Python为实现主体介绍了如何利用Python实现数据挖掘和机器学习中的常见算法。应用篇围绕商业数据分析中的常见场景和常用方法介绍了五个案例,从问题提出、数据收集、分析方法以及分析结论这几个层面系统性地介绍如何进行商业数据分析实战。本书的特点是什么受众对象的特点全书的风格突出“简洁性”,在内容安排上本书尽量做到精选,并在介绍商业数据分析知识点时,尽量采用简单的例子和图表等形象化表达方式,以帮助读者在较短的时间抓住商业数据分析中的重要知识点。全书内容的特点本书内容安排突出“系统性”,围绕商业数据分析,从Python基本语法,常用分析方法,以及实战案例三个方面,力求在一本书的框架内将这三方面内容串联起来。案例教学的特点本书在应用篇提供的五个教学案例,能够为商业数据分析领域的案例教学提供有效的参考和借鉴。这些案例在介绍过程中尽量突出与商业管理问题的结合,这也是本书重点突出的“实战性”特点。第2章Python简介
学习目标了解Python的发展历程描述利用Python进行数据分析的特点解释什么是面向对象的编程了解使用Python进行数据分析的代码规范在自己的个人电脑上安装并运行Python2.1发展历程Python由荷兰人GuidovanRossum发明于1989年,其取名源于20世纪70年代英国喜剧《MontyPython‘sFlyingCircus》。近20年来,Python语言受到广泛关注,其使用率不断上升。从2005年起,Python逐渐进入TIOBE等编程语言排行榜前列,在2019年已成为位列Java、C之后的第三大编程语言。Python的第一个公开发行版本发布于1991年,之后于2000年10月和2008年12月发布Python2.x和Python3.x。目前Python正朝着3.x版本进化,因此本书选取Python3进行讲解。Python目前在计算机、生物信息、金融等多领域都有所应用,尤其在云计算、爬虫、自动化运维、金融分析上,Python的应用率已位居首位,未来发展前景良好。2.2特点简洁易懂Python是一种解释型的、面向对象的计算机程序设计语言。开源与可移植性开源意味着用Python语言编写的程序的源代码是公开、可获得的。可移植性是指同一段Python代码在不同的系统平台上具有相同的执行效果。面向对象面向对象编程将对象作为程序的基本单元,相比于其他编程范式,代码的可重用性、灵活性增加。其它特点可扩展性、可嵌入性、丰富的库、代码规范等2.3语言标准Python编码风格指南《PythonEnhancementProposal#8》为规范代码提供了参考。下面列举部分代码规范:规范项具体要求代码布局每一级缩进使用4个空格;空格是首选的缩进方式,Python3不允许同时使用空格和制表符的缩进;所有行限制的最大字符数为79(文档字符或注释限制在72);导入多个模块时分开导入;三引号字符串总是使用双引号字符;表达式和语句中的空格紧跟在小括号,中括号或者大括号后;紧跟在逗号、分号或者冒号之前;紧跟在函数参数的左括号之前;总在二元运算符两边加一个空格;注释行内注释与代码间至少两个空格分隔,注释由一个#和一个空格开始;块注释每一行开头都使用一个#和一个空格(除非块注释内部缩进文本),块注释内部的段落通过只有一个#的空行分隔;命名规范类名的首字母大写;内置变量命名使用单个单词或两个单词连在一起;函数名应小写,为提高可读性可以使用下划线分隔;常量由全大写字母命名;2.4Python3的安装与运行——Windows安装进入Python官网(),点击导航栏的Downloads。选择Windows,并根据系统类型及所需Python版本点击下载相应的安装包。下载完安装包后,双击打开Python的安装向导,根据相应提示进行操作,一般接受默认设置即可。2.4Python3的安装与运行——Windows运行完成安装后可通过以下操作运行Python集成开发环境(PythonIntegratedDevelopmentEnvironment,IDLE):Windows的开始菜单>程序>Python>IDLE。在系统的命令提示符中也可运行Python,需要设置系统环境变量,步骤如下:右击“我的电脑”选择“属性”;点击“高级系统设置”>“环境变量”;在“Path”中添加Python安装的路径,点击“确定”即可。设置完后,打开系统的命令提示符,输入“python”即可运行Python。还可以在集成开发环境IDE中编写Python代码,如Pycharm、Sublime、Anaconda等。2.4Python3的安装与运行——Linux/Unix绝大多数Linux、Unix系统中(包括MacOSX)已有Python解释器,在提示符中输入python即可启动交互式Python解释器,使用Ctrl-D可以退出。若显示未安装Python,可以使用包管理器进行安装,输入以下命令:DebianLinux系统:apt-getinstallpythonGentooLinux系统:emergepython若没有包管理器,也可以采用与Windows类似的下载方法从Python官网中下载,步骤如下:进入Python官网(),点击导航栏的Downloads。选择SourceCode,进入后选择想要下载的版本。使用tar-xzvfPython-3.x.tgz解压缩文件。若tar版本不支持z选项,可以先用gunzip解压缩,再用tar-xvf命令。进入解压缩好的文件,并执行下面的命令即可安装:/configure–prefix=$(pwd)makemakeinstall设置环境变量,在bashshell中输入如下命令即可:PATH='$PATH:/usr/local/bin/python‘。其中,'/usr/local/bin/python'为Python的安装目录。2.4Python3的安装与运行——MacOS若已安装Python,则在终端应用程序中输入python命令即可。若未安装,可通过Fink()或MacPorts()进行安装,也可以从python官网上进行安装:进入Python官网,点击导航栏的Downloads。点击MacOSX,进入后选择相应版本的安装文件。下载.dmg安装文件,若未自动安装则双击文件。在已安装的磁盘映像中,双击安装包文件(.mpkg)可以打开安装向导,根据提示操作即可。2.5本章小结Python语言的发展历程Python语言的特点Python语言的编码规范Python的安装与运行第3章数据类型
学习目标创建变量,为变量赋值,在需要时删除变量列举通过Python进行数据分析过程中常用的数据类型描述Python中使用的数字类型,并进行相互转换区分列表、元组、字符串、字典和集合了解列表、元组、字符串、字典和集合的基本操作了解基本运算符,明确运算符计算优先级3.1概述——变量Python中的变量(variable)表示某值的名字,每创建一个变量,计算机就根据对应值的类型分配一定的内存空间来储存该值。变量的创建与删除Python通过变量赋值来创建变量。变量赋值通过等号“=”来实现,等号左边为变量名,右边为储存在变量中的值:Python中的变量命名可用大小写英文、数字、“_”的任意组合,但数字不能放在开头,同时在命名时也应当注意避开Python中的保留字。删除变量可以使用del(变量名),若要同时删除多个变量,用英文逗号隔开多个变量即可:3.1概述——变量多重赋值Python允许同时为多个变量赋予同一值:也可以将多个值赋予多个变量,这些值的类型可以不相同:3.1概述——变量增量赋值通过将表达式运算符放在赋值运算符“=”的左边来实现,对于*、/、%等标准运算符都适用:对于其他数据类型也适用,只要二元运算符本身适用于这些数据类型即可:3.1概述——数据类型框架
Python的数据类型框架:3.1概述——数据类型框架
Python中主要有六个标准的数据类型,可分为数字、字符串(str)、列表(list)、元组(tuple)、字典(dict)、集合(set)。其中,数字、字符串、元组为不可变数据类型。而列表、字典、集合(指可变集合set,另有不可变集合(frozenset)为可变数据类型。Python中常见的数据结构,即相互之间存在关系的数据元素的集合都可称作容器(container)。序列、映射、集合是Python中主要的容器。最基本的容器为序列(sequence),序列中元素的位置称为索引,以0、1、2...的方式递增。字符串、列表、元组都属于序列。映射中每个元素都有一个名字,互不相同,也称为键,字典就属于映射。至于既不是序列也不是映射的容器类型,集合就是一个例子。3.2数字类型——分类Python3的数字类型分为整数型(int)、浮点型(float)和复数型(complex)。整数整数可用十进制、二进制(0b或0B开头)、八进制(0o或0O开头)、十六进制(0x或0X开头)进行表示。浮点数浮点数也就是小数,可近似表示任意一个实数。对于用科学记数法表示的小数,Python中用e代替10。浮点数与整数在内存中储存方式不同,整数能够进行完全精确的运算,但浮点数运算会存在小的误差:3.2数字类型——分类复数复数由实数(整数、浮点数)和虚数组成。虚数单位用j表示。使用普通math模块中函数处理复数时可能会报错:处理复数时一般使用cmath模块:3.2数字类型—— 相关函数数字类型转换转换函数包括:举例如下:转换函数说明int(x)将浮点数x转换为整数,保留其整数部分float(x)将整数转换为浮点数complex(x,y)将x作为实数部分、y作为虚数部分转化为一个复数,其中x、y为数字表达式,若虚数部分为0,可省略y不写。3.2数字类型—— 相关函数数学函数一些常用的数学函数:举例如下:转换函数说明abs(x)取绝对值max(x1,x2...)返回参数x1、x2...中的最大值,参数可为序列min(x1,x2...)返回参数x1、x2...中的最小值,参数可为序列pow(x,y)返回x**y(即x的y次方)的值round(x,n)将浮点数x四舍五入,参数n表示舍入到小数点后第n位,可以省略不写sqrt(x)取平方根,x不可为复数3.2数字类型—— 相关函数数学函数math模块中还有许多数学函数,可通过math.函数名()来调用函数:举例如下:转换函数说明exp(x)返回自然常数e的x次幂fabs(x)返回x的绝对值log(x,y)返回以y为底x的对数3.3列表与元组——序列通用操作字符串、列表、元组都属于序列。所有类型的序列有通用的操作,包括索引(indexing)、切片(sliceing)、加法(adding)、乘法(multiplying)、审查成员资格(即检查某个元素是否在该序列内)和迭代(iteration),此外还有求序列长度、找最大元素、最小元素的内置函数。索引索引指通过序列中元素的编号(即索引值)访问该元素,注意第一个元素的编号为0:也可使用负数索引,此时编号由后往前递减,最后一个元素的编号为-1:除了通过变量进行索引外,还可以直接通过序列或函数返回结果进行索引:3.3.1序列通用操作——切片切片索引只能访问某一个元素,而切片可以访问一定范围内连续的元素,通过[索引1:索引2]来实现:与负数索引类似,切片也可以用负数编号表达:索引1、2也可以省去,如[索引1:]表示访问索引1元素及之后所有的元素,[:索引2]表示访问索引2元素之前的所有元素,[:]表示访问序列中所有元素:3.3.1序列通用操作——切片切片步长可以用通过显式设置改变,形式为[索引1:索引2:步长]:步长不能取零,但可以取负数,表示从后往前提取元素。在步长为正时,索引1应小于索引2,步长为负时,索引1应大于索引2:3.3.1序列通用操作——加法与乘法加法多个序列可以通过“+”连在一起,但这些序列的类型必须相同:乘法这里的乘法表示序列的重复:创建占用一定空间的空列表也可使用乘法:
3.3.1序列通用操作——成员资格成员资格布尔运算符“in”用来判断某个条件是否为真,若为真则返回True,若为假则返回False:其它求序列长度、最大值、最小值使用相应的len()、max()、min()函数即可:3.3.2列表——列表操作元素赋值列表能够通过元素赋值改变某个元素的值:但对于位置不存在的元素无法进行赋值:元素删除删除元素与删除变量类似,使用del()函数即可:3.3.2列表——列表操作分片赋值分片赋值可以用与原序列不等长的序列进行替换:分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素:通过分片赋值来删除元素也是可行的:3.3.2列表——列表方法与函数不同,方法的调用离不开对象,其调用格式为:对象.方法(参数),下面是列表方法:添加一个元素:append()用于在原列表后添加新的元素,每次只能添加一个元素:统计元素次数:count()用于统计列表中某个元素出现的次数:3.3.2列表——列表方法扩展原列表:extend()能够使用新列表扩展原列表:序列相加不会改变原序列,而extend方法修改了被扩展的原列表。找出元素索引:index()用于找出列表中某个值第一次出现的索引位置:3.3.2列表——列表方法插入元素:insert()用于在列表某个位置插入某个对象,格式为对象.insert(索引号,被插入的对象):删除元素:pop()用于删除列表中的元素,同时返回被删除元素的值,格式为对象.pop(索引号):pop方法默认删除列表中最后一个元素:
3.3.2列表——列表方法删除元素:pop()pop方法与append方法可以实现后进先出(last-in,first-out,LIFO)原则,这也正是“栈”这种数据结构的原理,相应的两个操作称为“入栈(push)”与“出栈(pop)”。与栈相反,队列(queue)是一种有先进先出(FIFO)特征的数据结构,可以通过insert(0,对象名)和pop()结合或append()和pop(0)结合来实现,也可以使用collection模块中的deque对象:
3.3.2列表——列表方法删除元素:remove()用于删除列表中某个值的第一个匹配项:倒置列表:reverse()用于将列表中的元素前后倒置:只限于列表,若要实现对序列的反向迭代,可以使用reversed()函数:
3.3.2列表——列表方法列表排序:sort()用于对列表进行排序:有时需要对列表进行排序且不改变原列表,可以先复制列表得到列表副本,再对副本进行排序。但直接y=x不会产生列表副本,而是让两个变量指向同一个列表:3.3.2列表——列表方法列表排序:sort()该方法有两个关键字参数:key和reverse。reverse指排序规则,取值为布尔值(False或True),默认为reverse=False,即升序。key指在排序中使用的函数,以列表中每个元素分别作为参数调用该函数,得到相应的返回值作为列表中该元素的键,再根据键来进行排序,默认为key=None。key也可以取自定义函数:
3.3.3元组元组与列表的区别在于元组一旦创建就不能修改,创建一个空元组如下:逗号对于元组的创建很重要,每两个元素之间以逗号隔开:注意在创建只有一个元素的元组时,该元素后的逗号不可省略:tuple函数与list函数类似,它能将一个序列转换为元组:3.3.3元组元组的操作与方法元组的基本操作即为序列的通用操作中的索引、分片等。方法有index()、count()等不修改序列的方法。元组的意义元组可以在映射(和集合的成员)中当作键使用。元组作为很多内建函数和方法的返回值存在。3.4.1字符串概述字符串是由字符组成的不可变序列,可以用单引号或双引号括起来。单引号和双引号在Python种无区别:对于本身包含了双引号或单引号的字符串,创建时应使用相应的另一种引号将该字符串括起来加以区分:3.4.1字符串概述在普通字符串中,反斜线(\)会对特殊字符进行转义,构成转义字符:转义字符也可被用于内容中有特殊字符的字符串的表示中:
转义字符说明转义字符说明\续行符\n换行\\反斜杠符号\v纵向制表符\’单引号\t横向制表符\’’双引号\r回车\a响铃\f换页\b退格\o八进制数\e转义\x十六进制数\000空\other其他的字符以普通格式输出3.4.1字符串概述str函数用于将值转换成字符串形式,输入需转换的值返回相应的字符串形式的值,但并不改变原值的类型:input函数用于获取用户的输入,无论输入值为什么类型,返回值都为字符串类型,括号中可写提示性文本或直接为空:print函数用于输出,括号中可以为一个或多个表达式,多个表达式之间用逗号隔开:3.4.1字符串概述其它在编写跨多行的字符串时,可以用转义字符“\n”来进行换行:也可以直接在字符串中用键盘的Enter键进行换行,但注意此时字符串外的引号必须为三个双引号或三个单引号:对于字符串中有与转义字符形式相同字符的情况,可以使用反斜线“\”进行转义,或在字符串前加“r”:3.4.2字符串格式化字符串格式化指将值按要求格式化后置于字符串中相应的位置。百分号%为字符串格式化操作符,%左边为格式化字符串,%右边为希望格式化的值(该值可以是字符串、数字、列表、元组、字典):字符串格式化的转换说明符(conversionspecifier)有:格式化符号说明格式化符号说明%c转换成字符%x,%X(Unsigned)转成无符号十六进制数(x/X代表转换后的十六进制字符的大小写)%r优先用repr()函数进行字符串转换%s优先用str()函数进行字符串转换%e,%E转成科学计数法(e/E控制输出e/E)%d,%i转成有符号十进制数%f,%F转成浮点数(小数部分自然截断)%u转成无符号十进制数%g,%G%e和%f/%E和%F的简写%o转成无符号八进制数%%输出%3.4.2字符串格式化转换说明符可以包括字段宽度和精度。字段宽度是转换后的值所保留的最小字符个数;精度对于数字转换来说是结果中应该包含的小数位数,对于字符串转换来说是转换后的值所能包含的最大字符个数。这两个参数都是整数,通过点号“.”
分隔:也可以用*作为字符宽度或精度,具体值从格式化操作符%后的元组中读取:若格式化字符串本身内容中有%时,使用%%来避免歧义。
3.4.3字符串方法查找子字符串:find()用于在字符串中查找子字符串,返回子其中第一个字符的索引,未找到则返回-1,格式为对象.find(子字符串,起始点索引,结束点索引):连接字符串:join()用一个元素来连接字符串列表,即在列表中的每两个字符串元素之间添加该连接元素:3.4.3字符串方法去除字符串两端字符:strip()用于除去字符串两侧包含参数字符串中字符的部分,返回一个新的字符串:该方法从字符串两端开始寻找参数字符串中的字符,删去与之相同的字符,直到遇到不在参数字符串中的字符。转化成小写字母:lower()用于将所有大写字母变为相应的小写字母:3.4.3字符串方法替换字符串:replace()用指定的字符串替代原字符串中所有的匹配项,返回新的字符串:分割字符串:split()是join的逆方法,用于按照指定的分隔符将字符串分割成序列:3.5.1字典概述创建字典字典中一个键与对应的值称为一项,每个键与对应的值之间用冒号“:”隔开,每一项之间用逗号“,”隔开:也可使用dict函数可以通过其他映射(如字典)、或(键、值)序列对来建立字典:还可通过关键字来创建字典,关键字名即为键名,对应的值即为字典中的值:3.5.1字典概述基本操作字典的基本操作与序列的通用操作类似,但应注意在进行索引、修改值、删除项、成员资格审查时都是使用键名调用相应的值,形式为字典名[键名]:字典还可以直接增加新的项:len(字典名)返回的是项的数量:
3.5.2格式化字符串格式化操作符%后可以是元组或字典,当%后为字典时,转换说明符%后通过(键名)加s来说明元素,可以将键对应的值格式化:通过字典格式化字符串可以在一个字典中多次格式化多个键对应的值:3.5.3字典方法清除字典所有项:clear()用于清除字典中所有的项,直接改变原字典,无返回值:
复制字典:copy()用于实现浅复制(shallowcopy),返回一个与原字典有相同键-值对的新字典:
3.5.3字典方法
浅复制与深复制在浅复制时,对于简单数据部分('age'),复制对象会在内存中开辟新地址,因此改变复制对象的值不会影响原对象的值;对于子对象部分('name'),复制对象仅引用原对象的地址,因此改变复制对象的值会改变原始对象的值。在深复制时,不管是简单数据部分还是子对象部分,复制的对象都会直接在内存中开辟新的地址空间,复制对象和原对象值的变化互不影响。
3.5.3字典方法复制字典:deepcopy()为避免修改副本时对原字典造成影响,可采用copy模块的deepcopy()函数实现深复制(deepcopy):
3.5.3字典方法使用给定的键创建字典:fromkeys()用于使用给定的键建立新的字典,值的默认值默认为None,也可自己设置。建立方式有两种:访问字典项:get()用于访问字典项,当访问的键不存在时会返回None,也可以设置默认值:3.5.3字典方法返回字典所有项:items()将字典中所有项以迭代器的形式返回,各项的排列没有特殊顺序:类似地,keys()方法以可迭代对象形式返回字典中的键:values()方法以可迭代对象形式返回字典中的值:
3.5.3字典方法删除字典键值对:pop()和popitem()pop用于在字典中删除给定键的键-值对,并返回该值:popitem用于随机删除键-值对并以元组形式返回该项:更新字典:update()将给定字典添加到另一个字典中,若有相同的键则进行覆盖:3.6.1集合概述集合(set)是由序列(或其他可迭代对象)构建的,集合中的元素是不重复的、无序的,主要用于检查成员资格和消除重复元素:创建集合时使用大括号{}或set()函数:3.6.1集合概述集合的运算类似于数学中集合的运算,可以求交集(&)、并集(|)、不同时被两个集合包含的元素(^)等:3.6.1集合概述frozenset不可变集合集合中不能包含其它集合,但将两个集合相加是很常用的,可使用frozenset函数将集合set转换为不可变集合:3.6.2集合方法更新集合:add()和update()add方法用于向集合中添加一个元素:update方法可同时向集合中添加多个元素,参数可以为字符串、列表、元组、字典(只会添加字典的键)等:3.6.2集合方法删除元素:remove()和discard()remove方法用于将指定元素从集合中移除,若指定元素不存在则会报错:discard方法也用于移除指定元素,但若该指定元素不存在也不会报错:3.7.1基本运算符——算术运算符Python中的基本运算符分为算术运算符、比较运算符、赋值运算符等多种类型。Python中的算术运算符:运算符说明+加法,将运算符两侧的值相加-减法,左侧操作数减去右侧操作数*乘法,将运算符两侧的值相乘/除法,左侧操作数除右侧操作数%求模,即求左侧操作数除左侧操作数后的余数**求幂,即求左侧操作数的右侧操作数次幂//地板除,将小数点后的位数截除、只保留整数部分3.7.2基本运算符——比较运算符Python中的比较运算符:运算符说明==判断两侧操作数的值是否相等,如果是,结果为真!=判断两侧操作数的值是否不相等,如果不相等,结果为真>
判断左操作数的值是否大于右操作数的值,如果是,结果为真<
判断左操作数的值是否小于右操作数的值,如果是,结果为真>=判断左操作数的值是否大于或等于右操作数的值,如果是,结果为真<=判断左操作数的值是否小于或等于右操作数的值,如果是,结果为真3.7.3基本运算符——赋值运算符Python中的赋值运算符:运算符说明=赋值运算符,将右侧操作数的值赋给左侧操作数+=将右操作数和左操作数相加,并将结果赋给左操作数,a+=b就等于a=a+b,下列类似-=将左操作数减去右边操作数的结果赋给左操作数*=将左操作数乘右操作数的结果赋给左操作数/=将左操作数除右操作数的结果赋给左操作数%=将左右操作数取余,并将结果赋给左操作数**=求左侧操作数的右侧操作数次幂,并将结果赋给左操作数//=执行地板除操作并将结果赋给左操作数3.7.4基本运算符——其他运算符Python中的其他运算符:运算符说明and表示逻辑“与”,若操作符两边都为真,则结果为真or表示逻辑“或”,若操作符两边有一个为真,则结果为真not表示逻辑“非”,若操作符右侧为假,则结果为真in若左操作数是右操作数的成员,结果为真。notin若左操作数不是右操作数的成员,结果为真。is若两侧变量指向相同的对象,结果为真。isnot若两侧变量指向相同的对象,结果为假&二进制位“与”运算符|二进制位“或”运算符^二进制位“异或”运算符~二进制“补码”运算符<<
二进位向左移位运算符>>
二进位向右移位运算符3.7.5运算符优先级表当不同运算符同时出现在同一个表达式时,表达式的计算步骤有优先级(优先级越大的越先执行):运算符说明优先级**幂14~按位补码13*,/,%,//乘,除,取余,地板除12+,-加法,减法11>>,<<按位右移,按位左移10&按位“与”9^按位“异或”8|按位“或”7<=,<,>,>=,!=,==比较运算符6is,isnot标识运算符5in,notin成员运算符4not逻辑“非”3and逻辑“与”2or逻辑“或”13.8本章小结Python中变量的概念与基本操作Python的基本数据类型Python中列表、元组、字符串、集合的概念与基本操作Python的基本运算符第4章条件与循环
学习目标判断布尔值的真假使用if、else、elif语句实现条件判断使用while语句、for语句实现代码循环,明确两者的使用条件使用break与continue语句结束循环,了解两种语句的跳转位置区别了解zip和enumerate函数,以及不同的迭代方式使用列表推导式创建循环列表4.1.1条件——布尔变量在Python中,布尔值True用来表示真,False用来表示假。下列值也会被解释器看作是假:None、()、{}、[]、“”、0等,即所有类型的数字0、空序列、空字典都为假,此外的一切都被解释为真:4.1.2条件语句if语句if语句是简单的条件语句,如果if后的条件判断为真,则执行冒号后的语句块,若条件为假则不执行:上述代码中没有“>>>”,因为当代码中使用条件、循环等语句时,代码会变长,为了更好地编辑代码,最好使用集成开发环境IDE或是保存为.py文件进行管理。4.1.2条件语句ifelse语句else语句用于对if语句中判断表达式值为假时进行操作的说明,不能脱离if语句单独存在:4.1.2条件语句ifelif语句有时进行一次条件判断并不够,elif语句就可以用于进行多次判断,必须与if语句同时使用:4.1.2条件语句嵌套有时在if语句判断为真时也要继续进行条件判断,将条件更加细化,这就可以通过嵌套的形式来实现:4.1.2条件语句assert语句有时要求某些条件必须为真,此时可使用关键字assert进行断言,相当于在程序中设置检查点:4.2.1循环——循环语句
除了条件判断,有时也要将同一段代码重复执行多次,就需要用到循环。while循环while循环通过判断while后的表达式的值的真假来控制循环的进行与结束,只要表达式的值为真,就执行冒号后的语句块,若表达式的值为假,则循环停止:4.2.1循环——循环语句
for循环在对序列或其他可迭代对象中每个元素循环执行相同代码时,for循环更合适:4.2.1循环——循环语句
for循环range函数为Python内置的范围函数,常用于迭代某范围的数字,它包含下限0,但不包含上限,默认步长为1,下限、上限、步长可依次设置值:4.2.1循环——循环语句
for循环for语句也可以用在对字典中键或值的循环中:由于字典中的项没有顺序的概念,即在循环中每一项都会被处理,但处理的顺序不确定,所以对于顺序很重要或有特殊要求的情况,可以结合列表进行处理。4.2.1循环——循环语句
循环的嵌套循环也可以进行嵌套:4.2.1循环——循环语句
break与continue结束循环break语句结束整个循环,而continue语句只结束当前的迭代、进行下一轮迭代,但不结束整个循环:4.2.1循环——循环语句
forelse语句forelse语句指在进行完for循环后,执行else语句中的代码块:4.2.1循环——循环语句
forelse语句forelse语句与break语句联合使用时会有更大的作用:4.2.1循环——循环语句
whileTrue/break语句whileTrue的条件一直为真,循环会一直进行,通过添加if/break语句可以在满足条件时结束循环:4.2.2迭代方式并行迭代并行迭代指同时循环迭代两个甚至多个序列:4.2.2迭代方式并行迭代zip函数也可以用于并行迭代,该函数将两个或多个序列“压缩”在一起,返回一个由元组构成的列表:对于不等长的多个序列,zip以最短的序列的长度为准进行匹配。
4.2.2迭代方式编号迭代有时在迭代时需要获取当前迭代对象的索引:4.2.2迭代方式编号迭代也可以使用内置的enumerate函数:4.2.2迭代方式翻转与排序迭代在迭代中可以使用reversed和sorted函数实现序列的前后翻转或排序,它们修改对象本身,而是返回翻转或排序后的列表或可迭代对象:4.2.3排序常用的排序算法有冒泡排序、快速排序、直接排序等,这里以冒泡排序(由小至大,共n个元素)为例:从序列最左端的第一个元素开始,将其与相邻元素进行比较,若相邻元素大于该元素则保持不变,同时操作元素替换为相邻元素,否则交换两者的位置。依次进行比较与调整,第一轮结束后,列表中最大的元素位于最右端。对序列前n-1个元素在进行①中的操作,整个冒泡排序共进行n-1轮比较。
4.3.1列表推导式列表推导式可遍历for后的可迭代对象,并对每个元素按照for前的表达式进行运算,以运算结果为新列表的元素,并最终返回新列表:列表推导式中也可以添加条件语句或进行循环嵌套:4.3.2其他语句pass语句pass语句可以在的代码中做占位符使用。如在if语句条件筛选时,有时会想要仅对某个条件不执行任何操作。但在Python中空代码块是非法的,解决这一问题可以在空代码块的位置加上pass语句:4.3.2其他语句del语句del语句用于移除对象:eval语句eval语句用于计算以字符串形式书写的python表达式:
4.4本章小结布尔变量的概念与使用if、else、elif条件语句的使用for、while、break、continue循环语句的使用并行迭代、编号迭代等不同迭代方式的实现冒泡排序的思路与实现列表推导式的使用第5章函数与类
学习目标描述Python函数的组成部分及其作用了解Python函数中参数的传递方式区分全局变量和局部变量创建类并定义类中的方法解释子类,超类,以及类之间的继承了解为一个类指定超类的方法创建迭代器实现迭代,了解迭代器与for循环语句的区别5.1.1函数的创建Python中除了内置函数外,也可以自定义函数。def语句用于定义函数:可以像调用内置函数一样调用自定义函数:5.1.1函数的创建return语句用于从函数中返回值:若return语句后不加返回值,则该函数的返回值为None,此时return语句只是起到结束函数的作用。
5.1.1函数的创建return语句函数也可以返回多个值,若用一个变量去接收返回值,则该变量的类型就是元组:若用与元素数量相等的变量去接收返回值,则各变量与元组中的各元素一一匹配:也可以选择性接收返回值:5.1.1函数的创建记录函数可以通过在函数中添加文档字符串进行说明,文档字符串会作为函数的一部分被储存:正常调用函数时并不会显示文档,需要通过以下方式访问:__doc__是函数的属性,doc两边为双下划线,表明它是一个特殊属性。5.1.2参数def语句中函数名后括号中的变量是函数的形式参数,调用函数时提供的值为实际参数,也叫参数。参数可以来自于函数外的变量。对于字符串、数字、元组等不可变的数据类型来说,调用函数时函数获得的参数相当于外界的变量将值输入函数中,函数内部对参数进行的操作并不会影响外界的变量:
5.1.2参数对于列表等可变数据类型来说,调用函数时传入的参数并非值本身,而是相应的储存地址,所以在函数内部改变了参数时,相应的函数外的变量的值也会随之变化:
5.1.2参数关键字参数前面提到的参数为位置参数,它们通过位置相互区分:
关键字参数通过参数名来区分,与顺序无关,但应注意参数名与值的对应:5.1.2参数关键字参数关键字参数可以在定义函数时给定默认值,调用函数时提供参数就不是必须条件了:
关键字参数与位置参数可以联合使用,但必须把位置参数放在前面:5.1.2参数收集参数通过在参数前面加*,可以实现接收任意多个参数、并将所有值“收集”在一个元组中:这种带星号的参数可以与普通参数联合使用,此时需要将普通参数放在前面:5.1.2参数收集参数若普通参数first后不再提供任何供收集的参数,则*x为空元组:*也可以执行相反的操作,在调用函数时将元组中的每个元素依序作为函数的参数:5.1.3作用域调用函数时,新的命名空间就创建了,函数内代码块的操作均在该命名空间中进行,不影响函数外的变量。相比于函数外的作用域,该命名空间为内部作用域,函数内的变量为局部变量(localvariable)。在函数中对与全局变量名相同的局部变量操作不会影响全局变量:5.1.4递归递归指的就是函数对自身的调用。如定义一个求参数n的阶乘的函数,可以使用循环或使用递归实现:5.1.4递归二分查找法二分查找的原理是将一个有序序列一分为二,判断所查找的元素在哪一部分,再将该部分继续分为平均的两部分,重复这一查找操作,直到找到目标元素:5.1.4递归快速排序快速排序原理是先任选序列中的一个数作为关键数据将所有比它大的放在它后面,将所有比它小的放在它前面,以这个找到位置的数为分界,分别对前面和后面两个子序列中的第一个元素进行重复操作,如此迭代,完成最终排序:5.2.1类——对象对象可以看作由数据(属性)及一系列可以存取、操作这些数据的方法组成,对象的优点主要是:多态(Polymorphism)、封装(Encapsulation)、继承(Inheritiance)。多态多态指可以对不同类的对象使用相同的操作,这在字符串、列表、字典方法中有所体现:方法(method)是绑定到对象特性上的函数,上述count方法就能对不同类型的对象进行相同的操作。5.2.1类——对象封装封装指对外部隐藏对象的工作细节,使外部可以不关心对象如何构建而直接使用。关于对象自身的一些描述性信息被“封装”在对象内,这些信息称为对象的属性(attribute),而对象中的方法可以访问、改变属性。继承在创建一个类时,如果已经有了另一个满足其基本属性、方法的类,就无需重新创建这个新类,只需要在已有类的基础上进行增改,这就是继承。5.2.2类的创建类是一种对象的概括,每一个对象都属于某一个类,称为类的实例(instance)。创建类要使用class语句,Python中类的命名习惯上使用单数名词、首字母大写:每个方法中都有self参数,表示对于对象自身的引用,可通过创建实例来进一步理解self参数:5.2.2类的创建可以将外部的函数绑定在某个对象的方法上:也可以用变量来引用一个对象的方法:5.2.3私有化与类的命名空间私有化创建类时有时希望某些属性或方法是私有的,即外部不能访问,只能由类内部的方法访问。但Python并不直接支持私有方式,在默认情况下,可以从外部访问一个对象的属性:5.2.3私有化与类的命名空间私有化只要在需要隐藏的方法或属性名字前加双下划线,即可使得方法或特性不能直接从外部访问:此时访问私有化的属性和方法,解释器都会报错:5.2.3私有化与类的命名空间私有化但类的内部定义中,有以双下划线开始的名字都会被翻译成前面加上单下划线加类名的形式,可以用这种形式在类外访问这些私有方法:5.2.3私有化与类的命名空间类的命名空间class语句中的所有代码也都在特殊的空间执行,这一特殊空间叫作类命名空间(classnamespace),可以由类内的所有成员访问:由于在类作用域内定义了一个操作,不论哪个对象调用init方法都会在类的属性上进行同样的操作,使得其它对象的同一属性发生变化。但如果是对某个对象的某个属性进行操作,其他对象的同一属性不会变化:5.2.4子类与超类指定超类创建子类时需要指定超类,通过在子类名后加(超类名)来实现:子类继承了超类的方法,其对象也可以调用这些方法:5.2.4子类与超类检查继承检查一个类是否为另一个类的子类,可以使用issubclass函数:在Python中,所有类最顶层的超类都是object类,可以使用Python中类的内置特性__bases__来查看类的超类:5.2.4子类与超类多个超类子类可以继承多个超类,指定超类时指定多个即可:5.2.4子类与超类多个超类继承的多个超类中有名字相同的不同方法,那么指定超类的顺序就很重要了,先指定的超类中的方法会重写后指定的超类中的方法:5.2.5特殊方法Python中,类似__init__这种名称前后各有两个下划线的方法为特殊方法:特殊方法说明__doc__输出类的描述信息__module__输出当前对象所在模块__class__输出当前对象所在类__init__构造方法,创建对象时自动执行__del__析构方法,当对象在内存中被释放时自动执行__call__对象名后加括号触发执行__dict__查看类或对象中的所有成员__str__打印对象时默认输出该方法的返回值__getitem__获取对象中的某元素__setitem__设置对象中的某元素__delitem__删除对象中的某元素__new__用于创建实例__metaclass__定义一个类如何被创建5.2.5特殊方法构造方法:__init__一个对象被创建后会自动调用__init__方法,起到初始化的作用:5.2.5特殊方法构造方法:__init__构造方法也可以接收传入参数:5.2.5特殊方法构造方法:__init__在创建子类的对象时,子类的构造方法会覆盖超类的构造方法,即子类对象并不会进行超类的初始化:5.2.5特殊方法构造方法:__init__为了解决这个问题,可以在子类的构造方法中调用超类的构造方法,注意调用超类的构造方法时需要写出self参数:还可以使用super函数调用超类的构造方法:5.2.6迭代器迭代指重复做一些事。通过for循环可对序列、字典等可迭代对象进行迭代,但在一些问题上并不是解决问题的最好方法,如找出斐波那契数列中第一个大于1000的数:迭代器(Iterator)是具有__next__方法的对象,调用__next__方法时,迭代器会返回它的下一个值。5.2.6迭代器iter函数与next函数iter函数以字符串、列表、元组、字典、集合等可迭代对象为参数,以转换后的迭代器为返回值:next函数以迭代器为参数,返回值为迭代器的下一个元素的值:5.2.6迭代器迭代器类的创建与使用自定义的迭代器类中要包括__next__方法与__iter__方法,其中,__next__方法用于说明迭代方法,__iter__用于返回迭代器:在定义Fibs迭代器类后,可以与for循环结合来寻找斐波那契数列中第一个大于1000的数:5.2.6迭代器从迭代器得到序列迭代器也能转换为序列,从而可以直接查看迭代器中的元素:5.3本章小结函数的创建与参数传递方式函数作用域、局部变量与全局变量的概念递归函数的实现对象的概念与特点类的创建、私有化与命名空间子类与超类的关系与指定方法迭代器的创建与使用第6章标准库、异常与文件流
学习目标区分模块、库以及标准库了解Python库的导入和使用方法熟悉os、sys、time、random、re标准库的功能和使用解释Python中常见的异常类型了解Python中实现异常捕捉的不同方法及其适用情况了解打开和关闭文件,以及读取和写入文件内容的方法6.1.1标准库——概念区分:模块、库与标准库模块是一个包含已定义函数和变量的文件,后缀名为.py,可被别的程序引入以使用模块中定义的函数。如创建一个名为fibo.py的斐波那契数列模块:6.1.1标准库——概念区分:模块、库与标准库在定义完该模块,将其放置到Python目录下Lib文件夹内或是其他Python解释器能够找到的位置,便可使用import语句导入该模块并使用它:如果模块的数量较多,可以利用库(Package)将这些模块组织起来。库的一个可能结构为:package/__init__.pysubpack1/__init__.pymodule_11.pymodule_12.pysubpack2/__init__.pymodule_21.pymodule_22.py6.1.1标准库——概念区分:模块、库与标准库如果需要使用库,例如将fibo模块组织在nums库里,调用fibo模块的fib函数可以使用如下语句:库可以看做是另一类模块,只是这样的模块里含有多个子模块,为了方便起见,之后的所有内容都会将统称为模块。Python内置了一些标准的模块库(StandardLibrary),这些组件会根据不同的操作系统进行不同形式的配置。常见的标准库有string、re、datetime等。
6.1.2 安装第三方模块第三方Python模块会被贮存在Python包索引(PythonPackageIndex)中,其安装需要通过一些指令完成。最简单的方法是在命令提示符中使用pip语句,以在Windows安装Numpy库为例,打开命令提示符后,输入以下语句:pipinstallnumpy。安装完成后,便可在程序里导入Numpy库并在代码里使用它。
6.1.3使用import语句导入模块如果想使用一个模块,需要在Python文件里执行import语句。如果import的语句比较长导致后续引用不方便,可以使用import...as...语法重新命名,再通过as后面名字来访问导入的模块:如果不想将整个模块导入而是模块的一部分,可以使用from...import...语句:
6.1.5常用标准库之一:os该模块是Python标准库中用于访问系统功能的模块,其中比较常用的变量或函数如下:
变量/函数说明os.environ返回包含环境变量的字典os.sep()返回用于系统路径的分隔符os.getcwd()获取当前路径os.listdir(path)获取指定路径下的所有文件和目录名称,默认为当前路径os.mkdir(path)在指定路径创建一个目录os.rmdir(path)删除指定路径的目录,当且仅当目录存在且目录为空才能删除os.path.exists(path)判断文件或目录是否存在,返回True/Falseos.path.isfile(path)判断是否为文件,返回True/Falseos.path.isdir(path)判断是否为文件夹,返回True/Falseos.path.join(path,name)连接目录与文件名称或目录6.1.5常用标准库之一:os获取当前程序所在路径:os.getcwd()获取指定路径下的所有文件和目录名称:os.listdir()连接目录与文件名称或目录:os.path.join()
6.1.6常用标准库之二:sys该模块提供对解释器使用或维护的一些变量访问,以及与Python解释器强烈交互的函数和变量,其中比较常用的变量或函数如下:
变量/函数说明argv命令行参数,包括脚本名称exit([arg])退出当前的程序,可选参数为给定的返回值或者错误信息modules映射模块名字到载入模块的字典path查找模块所在目录的目录名列表platform类似sunos5或者win32的平台标识符stdin标准输入流stdout标准输出流stderr标准错误流6.1.6常用标准库之二:sys获得脚本参数:sys.argv该变量是一个包含程序外部输入参数的列表,列表的第一个元素为程序名称,其他元素为用户输入的参数:它的效果应将程序保存后从外部运行并给出参数,如命令提示符下执行以下命令:得到结果:
C:\Users\xxx\Desktop>pythontest.py202122test.py['20','21','22']6.1.6常用标准库之二:sys处理标准输出:sys.stdoutsys.stdout.write()和print()都是与输出相关的函数。实际上print()内部也调用了sys.stdout,但是print()可以输出任意类型,sys.stdout.write()只能输出字符串类型;print()默认最后换行,但是sys.stdout.write()默认不换行。使用print()函数的输出:改用sys.stdout.write():
6.1.6常用标准库之二:sys输出错误信息:sys.stderr当程序崩溃并打印出调试信息的时候,信息前往stderr管道。我们也可以通过该函数自定义错误信息:
6.1.7常用标准库之三:time该模块能够实现获得当前时间、操作时间和日期、从字符串中读取时间以及格式化时间为字符串等功能。日期可以用实数或者是包含有9个整数的元组:
索引字段值0年比如2000等1月范围1~122日范围1~313时范围0~234分范围0~595秒范围0~616周当周一为0时,范围0~67儒历日范围1~3668夏令时0、1或-16.1.7常用标准库之三:time该模块中比较常用的函数如下:
函数说明asctime([tuple])将时间元组转换为字符串,默认为当前时间localtime([secs])将秒数转换为日期元组,以本地时间为准mktime(tuple)将时间元组转换为本地时间sleep(secs)休眠(不做任何事情)secs秒strptime(string[,format])将字符串解析为时间元组time()当前时间(新纪元开始后的秒数,以UTC为准)6.1.7常用标准库之三:time将时间元组转换为字符串:asctime()将秒数转换为日期元组:localtime()该函数作用是格式化时间戳为本地的时间,如果不传入任何参数,则返回的是当前时间,输出日期元组是一个struct_time对象:将时间元组转换为本地时间:mktime()与localtime()相反,该接收struct_time对象或者9位整数元组作为参数,返回用秒数来表示时间的浮点数:
6.1.7常用标准库之三:time将字符串解析为时间元组:strptime()在将字符串解析为时间元组时,需指定第二个参数说明字符串表示的日期格式:Python中的部分时间日期的格式化符号如下:
符号说明符号说明%y两位数的年份表示(00-99)%B本地完整的月份名称%Y四位数的年份表示(000-9999)%c本地相应的日期表示和时间表示%m月份(01-12)%j年内的一天(001-366)%d月内中的一天(0-31)%p本地A.M.或P.M.的等价符%H24小时制小时数(0-23)%U一年中的星期数(00-53)星期天为星期的开始%I12小时制小时数(01-12)%w星期(0-6),星期天为0%M分钟数(00-59)%W一年中的星期数(00-53)星期一为星期的开始%S秒(00-59)%x本地相应的日期表示6.1.8常用标准库之四:random该模块包括返回随机数的函数,可用于模拟或者用于任何产生随机输出的程序,其中比较常用的函数如下:
函数说明random()返回0≤n<1之间的随机实数ngetrandbits(n)以长整型形式返回n个随机位uniform(a,b)返回随机实数n,其中a≤n<brandrange([start],stop,[step])返回range(start.stop,step)中的随机数choice(seq)从序列seq中返回随意元素shuffle(seq[,random])原地指定序列seqsample(seq,n)从序列seq中选择n个随机且独立的元素6.1.8常用标准库之四:random返回0≤n<1之间的随机实数:random()该函数是最基本的随机函数之一,它的结果服从[0,1)均匀分布:返回随机实数:uniform()该函数需要提供两个数值参数a和b,它的结果服从[a,b)的均匀分布:
6.1.9常用标准库之五:re正则表达式(regex)是由一些特殊符号和字符组成的字符串,这些字符和特殊符号描述了文本的模式,正则表达式能按照模式匹配一系列有相似特征的字符串。Python通过标准库的re模块来支持正则表达式。正则表达式常用的特殊符号和字符
表示方法说明正则表达式样例literal匹配字符串的值foore1|re2匹配正则表达式re1或re2foo|bar.匹配任何字符(换行符除外)b.b^匹配字符串的开始^Dear\$匹配字符串的结尾/bin/*sh$*匹配前面出现的正则表达式零次或多次[A-Za-z0-9]*+匹配前面出现的正则表达式一次或多次[a-z]+\.com?匹配前面出现的正则表达式零次或一次goo?6.1.9常用标准库之五:re正则表达式常用的特殊符号和字符(续):
表示方法说明正则表达式样例{N}匹配前面出现的正则表达式N[0-9]{3}{M,N}匹配重复出现M次到N次的正则表达式[0-9]{5,9}[…]匹配字符组里出现的任意一个字符[aeiou][..x-y..]匹配从字符x到y的任意一个字符[0-9],[A-Za-z][^…]不匹配此字符集中出现的任何一个字符,包括某一范围的字符[^aeiou],[^A-z]\d匹配任何数字,和[0-9]一样(\D是\d的反义:任何非数符字)data\d+.txt\w匹配任何数字字母字符,和[A-Za-z0-9]相同(\W是\w的反义)[A-Za-z]\w+\s匹配任何空白符,和[\n\t\r\v\f]相同,(\S是\s的反义)of\sthe\b匹配单词边界(\B是\b的反义)\bThe\b\nn匹配已保存的子组(请参考上面的正则表达式符号:(…))price:\16\c逐一匹配特殊字符c(取消它的特殊含义,按字面匹配)\.,\\,\*\A(\Z)匹配字符串的起始(结束)\ADear6.1.9常用标准库之五:re管道符号‘|’表示“或”操作,即从多个模式中选择其一的操作,它用于分割不同的正则表达式。re模块中比较常用的函数或方法如下:
函数/方法描述compile(pattern,flags=0)对正则表达式pattern进行编译,flags是可选标识符,并返回一个regex对象group(num=0)返回全部匹配对象(或指定编号是num的子组)groups()返回一个包含全部匹配的子组的元组(如果没有成功,就返回一个空元组)match(pattern,string,flags=0)尝试用正则表达式模式pattern匹配字符串string,flags是可选标识符,如果匹配成果,则返回一个匹配对象;否则返回Nonesearch(pattern,string,flags=0)在字符串string中搜索正则表达式模式pattern的第一次出现,flags是可选标识符,如果匹配成功,则返回一个匹配对象;否则返回Nonefindall(pattern,string,flags)在字符串string中搜索正则表达式模式pattern的所有(非重复)出现;返回一个匹配对象的列表finditer(pattern[,string,flags])和findall()相同,但返回的是迭代器split(pattern,string,max=0)根据正则表达式pattern中的分隔符把字符string分割为一个列表,返回成功匹配的列表,最多分割max次(默认分割所有匹配的地方)sub(pattern,string,max=0)把字符串string中所有匹配pattern的地方替换成repl6.1.9常用标准库之五:re预编译:compile()在模式匹配发生之前,正则表达式模式必须先被编译成regex对象。虽然正则表达式的预编译不是必须的,且re模块的大部分函数或方法也自带编译操作,但预编译可以提高运行效率。pile()函数就能实现预编译功能:在预编译之后,可以使用正则表达式对象的函数或方法:
6.1.9常用标准库之五:re匹配对象和group()、groups()方法在处理正则表达式时,除regex对象外,还有另一种对象类型:匹配对象(matchobjects)。这些对象是在match()或search()被成功调用之后所返回的结果。匹配对象主要有两个方法:group()和groups()。group()方法能返回所有匹配对象,或是根据要求返回某个特定子组。groups()方法返回一个包含唯一或所有子组的元组。如果正则表达式中没有子组的话,groups()将返回一个空元组,而group()仍会返回全部匹配对象:
6.1.9常用标准库之五:re起始位置匹配字符串:match()match()从字符串的起始位置开始对模式进行匹配,如果匹配成功,就返回一个匹配对象,如果匹配失败,就返回None。匹配对象的group()方法可以用来显示那个成功的匹配(注意None是NoneTypeObject,没有group()属性):
6.1.9常用标准库之五:re任意位置匹配字符串:search()search()与match()一样都可以匹配字符串模式,不同之处在于search会检查参数字符串任意位置的地方给定正则表达式的匹配情况。如果搜索到成功的匹配,会返回一个匹配对象,否则返回None。匹配所有字符串:findall()findall()用于非重叠地搜索字符串中正则表达式模式出现的情况。findall()和search()相似之处在于二者都执行字符串搜索;与match()、search()不同之处在于findall()总返回一个列表:
6.1.9常用标准库之五:re搜索和替换:sub()和subn()sub()和subn()用于完成搜索和替换的功能,两者都能将字符串中正则表达式匹配的部分进行某种形式的替换。subn()函数仅返回返回替换后的结果:而subn()函数还会返回一个替换的总数,替换的字符串和该总数一起作为一个元组返回:
6.1.9常用标准库之五:re字符串分割:split()re.split()与字符串的split()方法相似,前者根据正则表达式模式分割字符串,后者根据固定的字符串分割。如果分隔符没有使用由特殊符号表示的正则表达式来匹配多个模式,那么re.split()和string.split()的执行过程是一样的,但是使用string.split()方法指定分隔符,只能指定一个,而使用re.split()方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 食堂食材采购管控内部研判报告
- 2026 内部流程变更宣贯不足内部研判报告
- 2026 法务审核时效管控复盘内部复盘报告
- 2026 安全工器具存放保管内部评估报告
- 2025年中医药健康服务发展规划总结评估
- 2025年中国量仪器行业市场前景预测及投资价值评估分析报告
- 食堂餐具消毒管理制度
- 2026年科目三多项题目及答案
- 2026企业所得税征管试题及答案解读
- 2026机务考试题目及答案
- 再喂养综合征的识别及护理进展
- 2026国企招聘考试(法务)历年参考题库含答案详解
- 巨幼细胞性贫血诊疗专家共识(2025版)
- T∕CECS 277-2021 建筑给水排水薄壁不锈钢管连接技术规程(团体标准)
- 2026年天然气分公司人员招聘笔试模拟试题及详细答案解析
- 第五单元 用字母表示数和数量关系 第6节 探秘百数表
- 国有企业意识形态工作责任制实施细则
- 风机隔声罩设计计算书
- 2026年6月浙江省高考物理试卷(含答案及解析)
- 危化品安全5分钟(001-200期)
- 《感动中国》2025年度人物揭晓!附颁奖词+人物事迹+作文素材+范文
评论
0/150
提交评论