版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器学习第1章绪论第1章绪论CHAPTERONEINTRODUCTION人工智能机器学习机器学习应用机器学习框架1234ArtificialIntelligentMachineLearningApplicationofMachineLearningFrameworkofMachineLearning小结5SummaryConceptofArtificialIntelligentHistoryofArtificialIntelligent人工智能人工智能概念11.1ArtificialIntelligent1.2人工智能发展史
人工智能并没有一个统一的定义。在学术界,有几个重要的观点:使一部机器的反应方式像一个人在行动时所依据的智能。人工智能是关于知识的学科——怎样表示知识以及怎样获得知识并使用知识的学科”。人工智能就是研究如何使计算机去做过去只有人才能做的智能工作”。1.1人工智能概念人工智能史上曾做出重要贡献的科学家1.1人工智能概念什么是人工智能?人工智能的含义:指使用机器代替人类实现认知、识别、分析、决策等功能。人工智能的本质:是对人的意识与思维的信息过程的模拟,是一门综合了计算机科学、生理学、哲学的交叉学科。1.1人工智能概念人工智能是促进人类进步的重要技术形态。对世界经济的影响:引领未来的战略性技术,提升国家竞争力、推动国家经济增长的重大战略;对社会进步的影响:是降低治理成本、提升治理效率、减少治理干扰最直接、最有效的方式;对日常生活的影响:可广泛应用于智能终端、智能家居、移动支付等领域,并将在民生领域发挥显著作用。1.1人工智能概念HistoryofArtificialIntelligent人工智能人工智能概念11.1ArtificialIntelligentConceptofArtificialIntelligent1.2人工智能发展史萌芽
阿兰·图灵于1950年,在Mind发表的论著《ComputingMachineryandIntelligence》,文中介绍了图灵测试、机器学习、基因算法、强化学习等概念,奠定了人工智能发展的基础。1.2人工智能发展史诞生标志:1956年在美国达特茅斯学院中举办的达特茅斯会议中首次提出“人工智能”的概念,标志着人工智能作为一个独立研究领域的诞生。达特茅斯学院1.2人工智能发展史黄金年代:1956–1974历史贡献:计算机可以解决代数应用题,证明几何定理,学习和使用英语。繁荣景象:研究者们认为具有完全智能的机器将在二十年内出现,政府机构向这一新兴领域投入大笔资金。1.2人工智能发展史第一次AI低谷:1974–1980标志性事件:1973年JamesLighthill针对英国人工智能研究状况的报告批评了人工智能在实现其“宏伟目标”上的完全失败。项目资金的流向也受到大幅影响。人工智能遭遇了6年左右的低谷。1.2人工智能发展史第一次AI低谷:1974–1980AI发展挫折:承诺的目标无法兑现,让人们当初的乐观期望遭到严重打击。跌入低谷原因:计算机性能的瓶颈、计算复杂性的指数级增长、数据量缺失等问题难以解决。1.2人工智能发展史繁荣时期:1980–1987开始标志:在80年代,一类名为“专家系统”的AI程序出现,并开始为全世界的公司所采纳。本质原因:认识到知识对于人工智能的重要性,并在实践应用中证明了其有效性。1.2人工智能发展史第二次发展的繁荣景象日本经济产业省拨款八亿五千万美元支持第五代计算机项目。英国开始了耗资三亿五千万英镑的Alvey工程。美国某企业协会组织了微电子与计算机技术集团,向AI和信息技术的大规模项目提供资助。DARPA组织了战略计算促进会(StrategicComputingInitiative),其1988年向AI的投资是1984年的三倍。人工智能又迎来了新的发展。1.2人工智能发展史第二次AI低谷:1987–1993背景:1987年AI硬件市场需求的突然下跌。Apple和IBM生产的台式机性能不断提升,老式计算机失去竞争力。专家系统升级和维护成本巨大,使用场景受限。表现:各大组织大幅削减AI研发经费。1.2人工智能发展史走在正确的路上:1993–2005原因:计算机性能的提升和科学家的默默努力,使AI能完成一些目标,并被成功应用在技术产业。经典应用:深蓝大战人类国际象棋冠军斯伯罗夫(96年)。IBM“深蓝”战胜国际象棋世界冠军1.2人工智能发展史深蓝大战人类国际象棋冠军1966年,IBM的超级计算机深蓝大战人类国际象棋冠军卡斯伯罗夫(国际象棋世界冠军),卡斯伯罗夫战胜了深蓝,比分4:2。赛后,媒体依然看好AI发展,这毕竟是国际象棋上计算机第一次战胜世界冠军两局。时隔一年,改进后的深蓝以3.5:2.5的比分战胜了斯伯罗夫。自从1997年以后,计算机下棋的本领越来越高。到了现在,棋类游戏中计算机已经可以完败任何人类。1.2人工智能发展史深蓝实际上收集了世界上百位国际大师的对弈棋谱,供计算机学习。这样一来,深蓝其实看到了名家们在各种局面下的走法。当然深蓝也会考虑卡斯伯罗夫可能采用的走法,对不同的状态给出可能性评估,然后根据对方下一步走法对盘面的影响,核实这些可能性的估计,找到一个最有利自己的状态,并走出这步棋。因此深蓝团队其实把一个机器智能问题变成了一个大数据和大量计算的问题。大数据时代:2005–现在开始标志:在机器翻译领域,Google用了上万倍的数据来训练系统,最终以巨大的优势打败了全世界所有机器翻译研究团队。成功的主要原因:互联网海量数据量,量变带来了质变;计算机计算性能发展,计算速度成万倍增长(GPU卡);深度学习的出现,使得逐层训练海量数据成为可能。1.2人工智能发展史赋予机器逻辑推理能力推理期将知识总结后交计算机知识期赋予机器学习新知识的能力机器学习期人工智能发展史的总结1.2人工智能发展史三大发展阶段1.2人工智能发展史最具革命性的技术——深度学习
1.2人工智能发展史GeoffreyHintonYannLeCunYoshuaBengio1.2人工智能发展史深度学习奠基人GeoffreyHintonGeoffreyHinton,被称为“神经网络之父”、“深度学习鼻祖”,他曾获得爱丁堡大学人工智能的博士学位,并且为多伦多大学的特聘教授。
1.2人工智能发展史深度学习奠基人YannLeCunYannLeCun,纽约大学教授,美国工程院院士、Facebook人工智能研究院院长、纽约大学Sliver教授,同时还兼职于科学数据中心,数学科学交流学院,神经科学中心,以及电子工程计算机系。1.2人工智能发展史深度学习奠基人YoshuaBengioYoshuaBengio是计算机科学与运筹学系的全职教授,蒙特利尔学习算法研究所(MILA)的负责人,CIFAR关于在Machines和Brains中学习的CIFAR计划的联合主任,加拿大统计学习算法研究主席。1.2人工智能发展史1.2人工智能发展史深度学习奠基人创建ImageNet,推动大规模数据集机器学习算法测试ImageNet目前已经包含了1400万张图片数据,超过2万个类别。向人工智能研究机构提供足够数量可靠地图像资料。1.2人工智能发展史首个自主识图神经网络2012年,吴恩达展示了一个超强的神经网络,能自主识别那些包含有小猫的图像内容。这是历史上在没有人工干预下,机器自主强化学习的里程碑式事件。1.2人工智能发展史GANs生成对抗网络算法这是一种用于无监督学习的人工智能算法,这种算法由生成网络和评估网络构成,以左右互搏的方式提升最终效果,这种方法很快被人工智能很多技术领域采用。1.2人工智能发展史DeepMind团队:AlphaGoandAlphaZero阿尔法围棋(AlphaGo)以4:1战胜世界围棋冠军李世石,标志着人工智能的研究得到更进一步突破。2017年,AlphaGo再次战胜现任的围棋世界冠军,中国的柯洁。1.2人工智能发展史ConceptofMachineLearningHistoryofMachineLearning机器学习机器学习概念22.1ArtificialIntelligent2.2机器学习发展史什么是机器学习?一门人工智能的科学;对能通过经验自动改进的计算机算法的研究;从样本数据中学习得到知识和规律,然后用于实际的推断和决策,是一种数据驱动的方法。2.1机器学习概念机器学习和人工智能的关系2.1机器学习概念机器学习分类监督学习非监督学习半监督学习强化学习2.1机器学习概念监督学习:通过标记示例训练,作为已知所需输出的输入。即模型知道训练数据的类别。2.1机器学习概念非监督学习:非监督学习用于针对没有历史标签的数据。模型不知道训练数据的类别,它将在海量数据中找出相似的结构。2.1机器学习概念半监督学习:但它只知道一部分训练数据的类别,另一部分不知道。强化学习:通常用于机器人、游戏和导航。算法通过尝试和错误发现,哪些行为会带来更大的回报。2.1机器学习概念容易混淆的概念——数据挖掘、机器学习、深度学习2.1机器学习概念日常生活中的机器学习2.1机器学习概念ConceptofArtificialIntelligentHistoryofArtificialIntelligent机器学习机器学习概念22.1ArtificialIntelligent2.2机器学习发展史2.2机器学习发展史开端1950年,图灵提出图灵机、图灵测试构想。2.2机器学习发展史第一个会学习的程序1952年,IBM的亚瑟·塞缪尔设计了一款可以学习的西洋跳棋程序。亚瑟·塞缪尔“机器学习之父”2.2机器学习发展史1980s:登上历史舞台1980年机器学习作为一支独立的力量登上了历史舞台。在这之后的10年里出现了一些重要的方法和理论,如分类与回归树,反向传播算法(BP算法)、卷积神经网络(CNN算法)。2.2机器学习发展史1990-2012:走向成熟和应用1995:支持向量机通过最大化分类间隔原则实现其算法2.2机器学习发展史1990-2012:走向成熟和应用1997:AdaBoost算法构建弱分类器,组成强分类器2.2机器学习发展史1990-2012:走向成熟和应用1997:循环神经网络和LSTM前馈型神经网络具有记忆功能应用在语音识别,自然语言处理2.2机器学习发展史1990-2012:走向成熟和应用2000:流形学习非线性降维技术Nature发表~2.2机器学习发展史1990-2012:走向成熟和应用2001:随机森林2.2机器学习发展史2.2机器学习发展史2012:深度学习时代,神经网络卷土重来起源:Hinton等人提出使用受限玻尔兹曼机训练训练深层神经网络。里程碑:AlexNet首先在图像分类问题上取代成功。2.2机器学习发展史2012:深度学习时代,神经网络卷土重来在各领域的成功图像处理领域:目标识别,目标检测,图像超分辨率;语音识别(国外微软,google;国内科大讯飞)自然语言处理等领域策略、控制类问题生成对抗网络(GAN)ApplicatePatternClassicApplication机器学习的应用应用模式33.1ApplicationofMachineLearning3.2经典应用3.1应用模式七大应用模式超个性化模式:将每个客户视为个体。新闻推荐:今日头条,百度新闻视频推荐:抖音,b站购物出行推荐:淘宝,京东,拼多多,美团,携程,亚马逊3.1应用模式七大应用模式自主系统模式:能够完成任务,达到目标,与周围环境交互,并在最少的人力参与下实现目标的实体和虚拟的软硬件系统。自主模式需要机器学习能力,能够独立感知外部世界,预测外部元素未来的行为,并计划如何处理这些变化。减少对手工劳动的需求。3.1应用模式七大应用模式人工智能助力预测分析和决策支持。3.1应用模式七大应用模式会话模式:能够像人类一样进行通信的机器。该模式最常见的例子包括聊天机器人、语音助手、感情、情绪和意图分析。它试图理解人类互动背后的意图,它还可以通过翻译促进人与人之间的互动。用人工智能识别模式和异常。3.1应用模式七大应用模式能够识别世界的机器:识别模式。目标驱动系统模式。围棋:AlphaGo和AlphaZero是让计算机可以通过游戏学习任何规则。DoTA等多人游戏:应用机器学习和其他认知方法,使其系统能够通过反复试验和发现错误来学习。ApplicatePatternClassicApplication机器学习的应用应用模式33.1ApplicationofMachineLearning3.2经典应用3.2经典应用生物特征识别领域指纹识别人脸识别视网膜识别虹膜识别3.2经典应用图像文本识别0413.2经典应用遥感图像识别3.2经典应用军事、公安刑侦等领域的应用3.2经典应用智能信息检索技术、自动驾驶等机器学习框架44.1FrameWorkofMachineLearningPytorchPytorch4.2OtherMainstreamFramework其它流行框架4.3SklearnSklearn4.1SklearnSklearn最初于2007年发布的scikit-learn,简称sklearn,是一个开源的基于python语言的机器学习工具包。通过NumPy,SciPy和Matplotlib等python数值计算库实现高效的算法应用,并且涵盖了几乎所有主流机器学习算法,专注于数据挖掘和数据分析。Sklearn为什么使用Sklearn机器学习框架:高效实现算法应用。官网讲解了基于sklearn对所有算法的实现和简单应用,其链接为:/stable/index.html。4.1SklearnSklearn具有如下强大机器学习算法库分类、回归、聚类降维(特征提取)、数据预处理、模型选择4.1Sklearn分类:识别对象的类别;回归:预测与对象相关联的连续值属性;聚类:将相似对象自动分组。4.1SklearnSklearn具有如下强大机器学习算法库特征降维:保持特征有效性同时,减少特征变量数量;模型选择:比较,验证,选择参数和模型;预处理:特征预处理和归一化。4.1SklearnSklearn具有如下强大机器学习算法库不支持GPU加速;不支持神经网络算法;4.1SklearnSklearn缺点:Sklearn的安装与使用环境要求:Python(>=2.7or>=3.3)、NumPy(>=1.8.2)、SciPy(>=0.13.3)环境检查:在命令行中输入:4.1SklearnSklearn的安装与使用简易安装:找到你的Terminal(MacOSorLinux),或者CMD(Windows).输入以下语句:python2+版本复制:pipinstall-Uscikit-learnpython3+版本复制:pip3install-Uscikit-learn4.1SklearnSklearn的安装与使用安装成功验证:找到你的Terminal(MacOSorLinux),或者CMD(Windows).输入以下语句:4.1SklearnSklearn的安装与使用线性回归测试:找到命令行,或者使用编译器新建项目.粘贴运行以下语句:4.1Sklearnfromsklearnimportlinear_modelmodel=linear_model.LinearRegression()#调用最小二乘回归方法model.fit([[0,0],[1,1],[2,2]],[1,2,3])#模型训练print(model.coef_)#输出权重weightprintprint(ercept_)#输出偏置biasprint(model.predict([3,3]))#预测当输入是(3,3)时的输出Sklearn机器学习框架Sklearn44.1FrameWorkofMachineLearningPytorchPytorch4.2OtherMainstreamFramework其它流行框架4.3PytorchPytorch4.2PytorchPytorchPytorch是由Facebook开源的神经网络框架,专门针对GPU加速的深度神经网络(DNN)编程,旨在实现简单灵活的实验。4.2PytorchPytorch的优势灵活性:支持动态神经网络,可以一边训练,一边修改网络结构;易用性:PyTorch的设计最符合人们的思维,使我们不需要花大量时间学习或者修改bug,也能较轻松地修改神经网络。4.2PytorchPytorch的缺点运行速度比c++慢;在移动端或嵌入式部署性能表现不佳。4.2PytorchPytorch的工具包torch.multiprocessing:python多进程并发,进程之间torchTensors的内存共享;torch.utils:数据载入器。具有训练器和其他便利功能; torch.legacy(.nn/.optim):处于向后兼容性考虑,从Torch移植来的legacy代码;4.2PytorchPytorch的工具包torch:类似NumPy的张量库,强GPU支持; torch.autograd:支持torch之中的所有可区分张量运行;torch.nn:与autograd深度整合的神经网络库; torch.optim:包含SGD、RMSProp、LBFGS、Adam等标准优化方式;4.2PytorchPytorch的安装和使用1、下载Anaconda
直接从Anaconda官网()下载,或者从清华大学开源软件镜像站(https://mirrors.tuna.tsinghua.e/anaconda/archive)下载。下载时选择适合自己的操作系统与版本点击下载4.2PytorchPytorch的安装和使用2、安装Anaconda,并配置环境变量打开下载的安装包安装完成后,对于Windows用户,可能需要配置环境变量:打开控制面板->高级系统设置->环境变量->系统变量找到Path,点击编辑,加入三个文件夹的存储路径(Anaconda所在路径、Anaconda所在路径\Library\bin、Anaconda所在路径\Scripts)。重启后生效。4.2PytorchPytorch的安装和使用3、安装PyTorch和torchvision在菜单中搜索并打开AnacondaPrompt,可以使用一条condainstall命令同时安装PyTorch和torchvision。condainstallpytorchtorchvision-cpytorch4.2PytorchPytorch的安装和使用菜单中的AnacondaPrompt4.2PytorchPytorch的安装和使用AnacondaPrompt界面输入下面的指令,安装时间较长。4.2PytorchPytorch的安装和使用3、验证安装在AnacondaPrompt中,复制粘贴下面代码。若输出pytorch的版本号,则成功安装。importtorchimporttorchvisionprint(torch.__version__)4.2PytorchPytorch的安装和使用3、验证安装成功安装4.2PytorchPytorch的安装和使用3、验证安装失败安装4.2PytorchPytorch的安装和使用4、Pytorch中文学习手册:/zergtant/pytorch-handbook里面有更多例子可供学习和练习Sklearn机器学习框架Sklearn44.1FrameWorkofMachineLearningPytorchPytorch4.2OtherMainstreamFramework其它流行框架4.34.3其它流向框架TheanoTheano是最早的深度学习框架之一,由YoshuaBengio和IanGoodfellow等人开发,是一个基于Python语言、定位底层运算的计算库。
被淘汰的原因是开发效率较低,模型编译时间较长。4.3其它流向框架CaffeCaffe(ConvolutionalArchitectureforFastFeatureEmbed-ding)是由贾杨清在攻读博士期间创建的项目,应用于学术研究项目、初创原型甚至视觉、语音和多媒体领域的大规模工业应用。是最早流行的深度学习框架。Caffe专注于表现力,速度和模块性。开源框架是用C++编写的,并附带Python接口。4.3其它流向框架Torch
Torch是一个非常优秀的科学计算库,基于较冷门的编程语言Lua开发。Torch灵活性较高,容易实现自定义网络层。但是由于Lua语言使用人群较小,Torch一直未能获得主流应用。4.3其它流向框架Tensorflow
Tensorflow是广泛使用的实现机器学习以及其它涉及大量数学运算的算法库之一。Tensorflow由Google开发,是GitHub上最受欢迎的机器学习库之一,基于Python语言编程。Tensorflow可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算。它得到谷歌的支持,这就说明该模型短期内不会被抛弃,因此值得投入时间来学习它。4.3其它流向框架Keras
Keras是一个基于Theano和TensorFlow等框架提供的底层运算而实现的高层框架,提供了大量方便快速训练,测试的高层接口,对于常见应用来说,使用Keras开发效率非常高。
但是由于没有底层实现,需要对底层框架进行抽象,运行效率不高,灵活性一般。4.3其它流向框架Tensorflow2TensorFlow2是一个与TensorFlow1.x使用体验完全不同的框架,TensorFlow2不兼容TensorFlow1.x的代码,同时在编程风格、函数接口设计等上也大相径庭。TensorFlow2支持动态图优先模式,在计算时可以同时获得计算图与数值结果,可以代码中调试实时打印数据,搭建网络也像搭积木一样,层层堆叠,非常符合软件开发思维。小结4Summary本节完机器学习第2章Python基础第2章Python基础CHAPTERTWOPYTHONBASICS认识PythonPython语法控制流语句序列1234函数类和对象模块文件操作5678认识PythonPython历史11.11.2Python开发环境1.3选择编译器1.1Python历史Python的创始人为荷兰的Guido
1989年,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python作为该编程语言的名字,是因为他是一个叫MontyPython的喜剧团体的爱好者。1.1Python历史1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。Python2.0于2000年10月16日发布,增加了实现完整的垃圾回收,并且支持Unicode。Python3.0于2008年12月3日发布,此版本不完全兼容之前的Python源代码。不过,很多新特性后来也被移植到旧的Python2.6/2.7版本。Python的发展历史认识PythonPython历史11.11.2Python开发环境1.3选择编译器1.2Python开发坏境搭建Python开发环境Python是跨平台的开发工具,可以在多个操作系统上进行编译,编写好的程序也可以在不同的系统上运行。常用的操作及说明如表2.1所示。认识PythonPython历史11.11.2Python开发环境1.3选择编译器1.1选择编译器下载和安装Python/1.3选择编译器下载和安装Python(以Windows系统为例)
安装Python步骤如下:双击打开下载后得到的exe安装文件,将显示安装向导对话框;选中所有复选框,再点击Customizeinstallation进行自定义安装;在弹出的的安装选项对话框中采用默认设置,单击Next按钮;默认其他设置,设置路径,单击Install按钮。1.3选择编译器下载和安装Python(以Windows系统为例)
检测Python是否成功安装步骤如下:在电脑桌面中,同时点击“win+r”两个按键;在运行栏中,输入cmd,启动命令窗口;在命令行窗口中,输入“python”,按下<enter>键;查看python解释器是否与自己要下载的版本一致。1.3选择编译器在安装Python后,会自动安装一个IDLE。它是一个PythonShell(可以在打开的IDLE窗口的标题栏上看到),程序开发人员可以利用PythonShell与Python交互。PyCharmMicrosoftVisualStudioEclipse+PyDev其他常用编译器:1.1选择编译器PyCharmPyCharm是一种PythonIDE(集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。功能:语法高亮显示Project(项目)管理代码跳转智能提示另外,它还支持在Django(Python的Web开发框架)框架下进行Web开发。自动完成调试单元测试和版本控制1.1选择编译器MicrosoftVisualStudioMicrosoftVisualStudio是Microsoft(微软)公司开发的应用进行C#和ASP.NET等应用的开发工具,只需要在安装时选择PTVS插件即可。安装PTVS插件后,在VisualStudio中就可以进行Python应用开发了。Eclipse+PyDevEclipse是一个开源的、基于Java的可拓展开发平台。最初主要用于Java语言的开发,不过该平台通过安装不同的插件,可以进行不同语言的开发,在安装PyDev插件后,Eclipse就可以进行Python应用开发。Python语法基础2语法格式2.12.2数据类型2.3命名规则运算符2.4input和print的用法2.52.32.42.1语法格式保留字是Python语言中一些已经被赋予特定意义的单词。开发程序时,不可以把这些保留字作为变量、函数、类、模块和其他对象的名称来使用。Python语言中的保留字如表2.2所示。保留字2.1语法格式主要用来标识变量、函数、类、模块和其他对象的名称。由字母、下划线“_”和数字组成。第一个字符必须是字母表中字母或下划线,不能是数字。不能使用Python中的保留字。标识符对大小写敏感,使用时区分字母大小写。Python中以下划线开头的标识符由特殊意义,一般应避免使用相似的标识符。命名规则标识符2.1语法格式注释(Comments)的含义:用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。注释的作用:通过用自己熟悉的语言,在程序中对某些代码进行标注说明,能够大大增强程序的可读性。注释分为单行注释和多行注释两类。注释2.1语法格式单行注释在Python中,使用“#”作为单行注释的符号。从符号“#”开始直到换行为止,“#”后面所有的内容都作为注释的内容,并被Python编译器忽略。单行注释只能注释一行内容,可以放在要注释代码的前一行,也可以放在要注释代码的右侧,语法如下:#注释内容2.1语法格式多行注释Python使用三个连续的单引号'''或者三个连续的双引号"""注释多行内容。具体格式如下:"""第1行注释第2行注释......"""或'''第1行注释第2行注释......'''2.1语法格式不管是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看做正常代码的一部分,例如:print('''Hello,World!''')print("""/cplus/""")print("#是单行注释的开始")运行结果:Hello,World!/cplus/#是单行注释的开始注释2.1语法格式
在Python中,对于类定义、函数定义、流量控制语句、异常处理语句等,行尾的冒号和下一行的缩进表示下一行代码的开始,而缩进结束,则表示一个代码块的结束。age=22ifage>=18:
print("Adult")
print("Youareman!")else:
print("Teenager")age=22ifage>=18:
print("Adult")print("Youareman!")else:
print("Teenager")Python对代码的缩进要求非常严格,同一级别的代码块的缩进量必须相同。如果不采用合理的代码缩进,将抛出SyntaxError异常。代码缩进Python语法基础2语法格式2.12.2数据类型2.3命名规则运算符2.4input和print的用法2.52.32.42.2数据类型
在内存中存储的数据有多种类型。例如:一个人的姓名可以用字符型存储年龄可以使用数值型存储婚姻状况可以使用布尔型存储
这里的字符型、数值型、布尔型都是Python语言中提供的基本数据类型。下面将介绍基本数据类型。2.2数据类型整数整数用来表示整数数值,即没有小数部分的数值。整数类型包括十进制、八进制数、十六进制数和二进制数。十进制数:如111,222,-333二进制数,由0和1两个数组成,进位规则是“逢二进一”,并且以0b或0B开头的数,如0b110,-0B010八进制,由0~7组成,进位规则是“逢八进一”,并且以0o或0O开头的数,如0o777,-0O666十六进制,由0~9,A~F组成,进位规则是“逢十六进一”,并且以0x或0X开头,如0x9b,-0Xbd2.5数据类型浮点数
浮点数由整数部分和小数部分组成,主要用于处理包括小数的数。例如:1.414、0.5、-1.732、3.1415926535897932等。浮点数也可以使用科学计数法表示。例如,2.7e2、-3.14e5和6.16e-2等。2.2数据类型字符串类型字符串就是连续的字符序列,可以是计算机所能表示的一切字符的集合。在Python中,字符串属于不可变序列,通常使用单引号''、双引号""、三引号"'"'或者""""""括起来。区别:单引号和双引号中的字符序列必须在一行上。三引号的字符序列可以分布在连续的多行上。2.2数据类型字符串处理
在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理。如:拼接字符串截取字符串格式化字符串下面将对Python中常用的字符串操作方法进行介绍。
2.2数据类型字符串操作方法——拼接字符串使用“+”拼接字符串在Python中使用“+”拼接字符串,“+”运算符可以连接多个字符并产生一个字符串对象。x="hello"y="world"print(x+""+y+"!")例如:注意:字符串不允许直接与其他类型的数据拼接。运行结果:helloworld!2.2数据类型字符串操作方法——拼接字符串使用join()函数
除此之外,还可以使用join()函数的方法,将字符串以指定分隔符拼接起来。例如:在定义好的三个字符串间以分隔符连接起来,直接把分隔符加入字符串间。x=["2020","9","24"]print("-".join(x))注意:字符串不允许直接与其他类型的数据拼接。运行结果:2020-9-242.2数据类型字符串操作方法——截取字符串由于字符串也属于序列,所以要截取字符串,可以采用切片方法实现。通过切片方法截取字符串的语法格式如下:如果开始索引的位置不指定,则默认为0。如果结束索引的位置不指定,则默认为字符串的长度。切片的步长为负数时,代表从右向左取元素,如果省略,则默认为1,当省略该步长时,最后一个冒号也可以省略。<要截取的字符串名>[<开始索引(start)>:<结束索引(end)>:<步长(step)>]2.2数据类型字符串操作方法——截取字符串例:a='abcdefghijklmn'print(a[1:4])#从下标1开始到4结束进行切片(左开又闭)。bcdprint(a[1:8])#从下标1开始到8结束进行切片(即左开又闭)。bcdefghprint(a[1:8:2])#从下标1开始到8结束进行切片(即左开又闭),步长为2。bcdefghprint(a[8:1:-2])#当补偿为负数时,代表逆向截取。初始从坐标8开始,每隔一个元素取一个值,到下标为1时结束。igec2.2数据类型字符串操作方法——格式化字符串含义:制定一个模板,在这个模板中预留几个空位,然后再根据需要填上相应的内容。特点:这些空位需要通过指定的符号标记(也称占位符),而这些符号还不会显示出来。在Python中,格式化字符串有以下两种方法。使用“%”操作符format()2.2数据类型字符串操作方法——格式化字符串使用“%”操作符“%”是python最早的格式化字符串操作符,也是能兼容所有版本的一种字符串格式化方法,它会把字符串中的格式化符按顺序后面参数替换。格式如下:‘%[-][+][0][m][.n]格式化字符’%exp-:可选参数,用于指定结果左对齐,正数前无符号,负数前加负号。+:可选参数,用于指定结果右对齐,正数前加正号,负数前加负号。0:可选参数,表示右对齐,正数前无符号,负数前加负号,显示的数字前面填充‘0’代替空格。m:可选参数,表示显示的最小总宽度。.n:可选参数,表示小数点后保留位数。2.2数据类型exp:要转换的项。如果要指定的项有多个,需要通过元组的形式进行指定,但不能使用列表。格式化字符串:用于指定类型,如下表2.3所示:‘%[-][+][0][m][.n]格式化字符’%exp2.2数据类型字符串操作方法——格式化字符串format()内置的字符串类提供了format()方法进行复杂变量替换和值格式化的能力。string模块中的Formatter类允许使用与内置format()方法相同的实现来创建并定制自己的字符串格式化行为。format(format_string,*args,**kwargs)是首要的API方法。它接受一个格式字符串和任意一组位置和关键字参数。2.2数据类型布尔类型
布尔类型主要用来表示真值或假值。在Python中,标识符True和False被解释为布尔值。Python中的布尔值可以转化为数值,True表示1,False表示0。在Python中,所有的对象都可以进行真值测试。其中,只有下面列出的几种情况得到的值为假,其他对象在if或者while语句中都表现为真。
Flase或None数值中的零,包括0、0.0和虚数0。空序列,包括字符串、空元组、空列表、空字典。自定义对象的实例,该对象的__bool__方法返回False或者__len__方法返回0。2.2数据类型数据类型转换Python是动态类型的语言(也称为弱类型语言),不需要先声明变量的类型,但有时仍然需要用到类型转换。在Python中,提供了如表2.4所示的函数进行数据类型的转换。Python语法基础2语法格式2.12.2数据类型2.3命名规则运算符2.4input和print的用法2.52.32.42.3命名规则模块命名规范在编写代码中起到很重要的作用,虽然不遵循命名规范,程序也可以运行,但是使用命名规范可以更加直观地了解代码所代表的含义。本节将介绍Python中常用的一些命名规范。模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)。函数函数名一律小写,如有多个单词,用下划线隔开。私有函数在函数前加一个下划线_。2.3命名规则变量名变量名尽量小写,如有多个单词,用下划线隔开。常量采用全大写。常量常量使用以下划线分隔的大写命名,如有多个单词,使用下划线隔开。类名类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。将相关的类和顶级函数放在同一个模块里。不用像Java一样限制一个类一个模块。Python语法基础2语法格式2.12.2数据类型2.3命名规则运算符2.4input和print的用法2.52.32.42.4运算符含义:运算符是一些特殊的符号,主要用于数学计算、比较大小和逻辑运算等。Python的运算符主要包括:算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符和位运算符。表达式含义:使用运算符将不同类型的数据按照一定的规则连接起来的式子,称为表达式。例:使用算术运算符连接起来的式子称为算术表达式使用逻辑运算符连接起来的式子称为逻辑表达式。2.4运算符算术运算符2.4运算符赋值运算符
赋值运算符主要用来为变量等赋值。2.4运算符比较(关系)运算符
比较运算符,也称关系运算符,用于对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回True,如果为假,则返回False。2.4运算符逻辑运算符
逻辑运算符是对真和假两种布尔值进行运算,运算后的结果仍是一个布尔值,Python中的逻辑运算符主要包括and(逻辑与)、or(逻辑或)、not(逻辑非)。表2.8列出了逻辑运算符的用法和说明。2.4运算符位运算符
位运算符是把数字看作二进制数来进行计算,因此,需要先将要执行运算的数据转换为二进制,然后才能进行执行运算。Python中的位运算符有:位与(&)运算符位或(|)运算符位异或(^)运算符取反(~)运算符左移位(<<)运算符右移位(>>)运算符2.4运算符“位与(&)”运算
“位与”运算的运算符为“&”,“位与”运算的运算法则是:两个操作数据的二进制表示,只有对应数位都是1时,结果数位才是1,否则为0。如图2.1所示。图2.112&8的运算过程2.4运算符“位或(|)”运算
“位或”运算的运算符为“|”,“位或”运算的运算法则是:两个操作数据的二进制表示,只有对应数位都是0,结果数位才是0,否则为1。如图2.2所示。图2.24|8的运算过程2.4运算符“位异或(^)”运算
“位异或”运算的运算符是“^”,“位异或”运算的运算法则是:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果为0,否则为1。如图2.3所示。
图2.331^22的运算过程2.4运算符“位取反(~)”运算
“位取反”运算也称“位非”运算,运算符为“~”。“位取反”运算就是将操作数中对应的二进制数1修改为0,0修改为1,如图2.4示。
图2.4~123的运算过程2.4运算符“左移位(<<)”运算
左移位运算符<<是将一个二进制操作数向左移动指定的位数,左边(高位段)溢出的位被丢弃,右边(低位端)的空位用0补充。左移位运算相当于乘以2的n次幂。“右移位(<<)”运算
右移位运算符>>是将一个二进制操作数向右移动指定的位数,右边(高位段)溢出的位被丢弃,而在填充左边(高位端)的空位,如果最高位是0(正数),左侧空位填入0;如果最高位是1(负数),左侧空位填入1。右移位运算相当于除以2的n次幂。2.4运算符运算符的优先级Python的运算符的运算规则:优先级高的运算先执行优先级低的运算后执行同一优先级的操作按照从左到右的顺序进行括号内的运算最先执行Python语法基础2语法格式2.12.2数据类型2.3命名规则运算符2.4input和print的用法2.52.32.42.5input和print的用法input的用法
在Python中,使用内置函数input()可以接收用户的键盘输入。input()函数的基本用法如下:variable=input(“提示文字”)
variable为保存输入结果的变量双引号内的文字用于提示要输入的内容例:想要接收用户输入的内容,并保存到变量tip中,可以使用下面的代码:tip=input(“请输入文字:”)
如果想要接收数值,需要把接收到的字符串进行类型转换。2.5input和print的用法print的用法
在Python中,使用内置的print()函数可以将结果输出到IDLE或者标准控制台上,其基本语法格式如下:
print(输出内容)
输出内容可以是数字和字符串(字符串需要使用引号括起来),此类内容将直接输出,也可以是包含运算符的表达式。a=10#变量a,值为10
b=6#变量b,值为6
print6)#输出数字6
print(a*b)#输出变量a*b的结果60
print(aifa>belseb)#输出条件表达式的结果10
print"成功的秘诀——坚持")#输出字符串“成功的秘诀——坚持”
控制流语句判断语句33.13.2循坏语句Pyhon其他语句3.33.1判断语句if语句是最简单的条件判断语句,它可以控制程序的执行流程。if语句
if判断条件:
满足条件时要做的事情1…
满足条件时要做的事情2…......
满足条件时要做的事情n…3.1判断语句if...else语句if条件:
满足条件时要做的事情1
满足条件时要做的事情2...(省略)...
满足条件时要做的事情3else:
不满足条件时要做的事情1
不满足条件时要做的事情2...(省略)...
不满足条件时要做的事情n3.1判断语句if...elif...else语句if判断条件1:
满足条件1时要做的事情elif判断条件2:
满足条件2时要做的事情elif判断条件3:
满足条件3时要做的事情......else判断条件n:满足条件n时要做的事情当满足判断条件1时,执行满足条件1时要做的事情,然后整个if结束;如果不满足判断条件1,那么判断是都满足条件2,如果满足判断条件2,就执行满足条件2时要做的事情,然后整个if结束,如果满足判断条件3,则执行满足判断条件3时要做的事情,然后整个if结束。当不满足判断条件1、判断条件2和判断条件3时,如果满足判断条件n,则执行满足判断条件n时要做的事情,然后整个if结束。控制流语句判断语句33.13.2循坏语句Pyhon其他语句3.33.2循环语句while循环语句while条件表达式:
条件满足,执行循环语句while循环语法格式条件表达式永远为true,无限循环。3.2循环语句for循环语句Python中的for循环可以遍历任何序列的项目:for变量in序列:
循环语句语法格式foriin[0,1,2]:
print(i)例如:控制流语句判断语句33.13.2循坏语句Pyhon其他语句3.3break语句用于结束整个循环。
i=1foriinrange(5):i+=1print("-------")ifi==3:breakprint(i)foriinrange(5):print("-------")print(i)这两个结果有什么不同?3.3Python其他语句break语句continue的作用是用来结束本次循环,紧接着执行下一次的循环。
i=1foriinrange(5):i+=1print("-------")ifi==3:continueprint(i)foriinrange(5):print("-------")printi这两个结果有什么不同?3.3Python其他语句continue语句pass是空语句,它是为了保持程序结构完整性。forletterin'Runoob':ifletter=='o':passprint('执行pass块')print('当前字母:',letter)print("Goodbye!")pass语句不做任何事情,用作占位。3.3Python其他语句pass语句序列类型及操作4序列处理函数及方法4.14.2列表2.3元组字典2.4集合4.54.34.4序列类型及操作4序列是一维元素向量,元素类型可以不同。序列是具有先后关系的一组元素。元素间由序号引导,通过下标访问序列的特定元素。4.1序列处理函数及方法序列类型的定义图2.5序号的定义4.1序列处理函数及方法序列类型通用操作符4.1序列处理函数及方法序列类型通用函数和方法序列类型及操作4序列处理函数及方法4.14.2列表2.3元组字典2.4集合4.54.34.44.2列表列表的定义列表是一种序列类型,创建后可以随意被修改。使用方括号[]或list()创建,元素间用逗号分隔。列表中各元素类型可以不同,无长度限制。l=[1,2.0,'hello']print(l)list(range(start,end,step)A=[1,'xiaoWang','a',[2,'b']]A=['xiaoWang','xiaoZhang','xiaoHua']A[1]=‘xiaoLu’
列表索引是从0开始的,我们可以通过下标索引的方式来访问列表中的值。
A=['xiaoWang','xiaoZhang','xiaoHua']
print(A[0])
print(A[1])4.2列表列表类型的定义4.2列表列表的循坏遍历使用for循环实现namesList=['xiaoWang','xiaoZhang','xiaoHua']fornameinnamesList:print(name)使用for循环和enumerate()函数实现forindex,iteminenumerate(listname):#输出index和item4.2列表其他列表类型操作函数和方法4.2列表其他列表类型操作函数和方法序列类型及操作4序列处理函数及方法4.14.2列表2.3元组字典2.4集合4.54.34.44.3元组元组类型的定义元组是一种序列类型,一旦创建就不能被修改。使用小括号()或tuple()创建,元素间用逗号分隔。可以使用或不使用小括号。元组继承了序列类型的全部通用操作。tup1=('physics','chemistry',1997,2000)tup2=(1,2,3,4,5)tup3="a","b","c","d"例:4.3元组元组与列表的区别元组不可变序列,元素可以随时修改或删除;列表可变序列,其中元素不可修改,除非整体替换;元组只支持切片访问,不支持切片修改;列表都支持;元组访问和处理速度比列表快。使用当只需要对其中的元素进行访问时,建议使用元组;元组可以作为字典的键;列表不能。序列类型及操作4序列处理函数及方法4.14.2列表2.3元组字典2.4集合4.54.34.44.4字典字典类型的定义键值对:键是数据索引的扩展。字典是键值对的集合,键值对之间无序。采用大括号{}和dict()创建,键值对用冒号:表示。字典类型是“映射”的体现<字典名称>={‘键1’:’值1’,’键2’:’值2’,...,’键n’:’值n’,}<值>=<字典名称>
[<键>]<字典名称>[<键>]=<值>[]用来向字典变量中索引或添加元素4.4字典字典类型操作函数及方法序列类型及操作4序列处理函数及方法4.14.2列表2.3元组字典2.4集合4.54.34.44.4集合集合类型的定义集合类型与数学中的集合概念一致集合元素之间无序,每个元素唯一,不存在相同元素集合元素不可更改,不能是可变数据类型集合用大括号{}表示,元素间用逗号分隔建立集合类型用{}或set()建立空集合类型,必须使用set()集合是多个元素的无序组合4.4集合集合的运算S|TS-TS&TS^T函数的定义与使用5函数的理解与定义5.15.2函数的使用及调用过程2.3函数的参数传递和返回值局部变量和全局变量2.45.35.4
函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段,它能够提高应用的模块性和代码的重复利用率。print("*")print("***")print("*****")如果在一个程序的不同地方需要输出这个图形,每次使用print语言输出的做法显然不可取。5.1函数的理解与定义什么是函数?Python定义函数使用def关键字,格式如下:def<函数名>(<参数(0个或多个)>):<函数体>
return<返回值>5.1函数的理解与定义函数的定义defprintInfo():print('------------------------------------')print('生命苦短,我用Python')print('------------------------------------')这是一个自定义的函数:5.1函数的理解与定义函数的定义函数的定义与使用5函数的理解与定义5.15.2函数的使用及调用过程2.3函数的参数传递和返回值局部变量和全局变量2.45.35.4
定义了函数之后,想要让这些代码能够执行,需要调用函数。通过“函数名()”
即可完成调用,格式如下:#调用刚才定义的函数printInfo()5.2函数的使用及调用过程<函数名>(<可选参数(0个或多个)>)例:函数的定义与使用5函数的理解与定义5.15.2函数的使用及调用过程2.3函数的参数传递和返回值局部变量和全局变量2.45.35.4
函数定义时可以为某些参数指定默认值,构成可选参数,具体语法格式如下:5.3函数的参数传递和返回值def<函数名>(<非可选参数>,<可选参数>):<函数体>
return<返回值>可选参数传递
函数设计时可以设计可变数量参数,即不确定参数总数量。具体语法格式如下:5.3函数的参数传递和返回值def<函数名>(<参数>,*b):<函数体>
return<返回值>可变参数传递函数调用时,参数可以按照位置或关键字方式传递。位置参数要求传递参数的数量和位置与定义时保持一致。
如:deffun(a,b),调用时使用fun(2,1),其中,a=2,b=1;关键字参数在调用函数时,使用形参名来确定输入的参数值,位置随意。如:deffun(a,b),调用时使用fun(b=1,a=2)或者fun(a=2,b=1)。5.3函数的参数传递和返回值参数传递的两种方式return保留字用来传递返回值函数可以有返回值,也可以没有,可以有return,也可以没有。return可以传递0个返回值,也可以传递任意个返回值。5.3函数的参数传递和返回值函数的返回值(Return)函数可以返回0个或多个结果函数的定义与使用5函数的理解与定义5.15.2函数的使用及调用过程2.3函数的参数传递和返回值局部变量和全局变量2.45.35.45.3局部变量和全局变量定义:局部变量:函数内部定义的变量,只在函数内部有效。全局变量:能作用于函数内外变量,如果变量在函数体外定义,该变量在函数体内外都可以访问;如果变量在函数体内定义,经过global修饰后,该变量也变为全局变量。使用规则:基本数据类型,无论是否重名,局部变量与全局变量不同;可以通过global保留字在函数内部声明全局变量;组合数据类型,如果局部变量未真实创建,则是全局变量。类和对象6类和对象的概念6.16.2类的创建和使用6.1类和对象的概念类是对一群具有相同特征或者行为的事物的一个统称。类的主要作用是表示某些特征和行为。Python中对象的概念很广泛,Python中的一切内容都是对象,除了数值、字符串、列表、元组、字典、集合、range等等。类和对象6类和对象的概念6.16.2类的创建和使用6.2类的创建和使用定义类
Python使用class关键字来定义类,class关键字之后是一个空格,然后是类的名字,再然后是一个冒号,最后换行并定义类的内部实现。Python定义类方法:class类名(参数):def函数名(参数):
'''类文档字符串'''函数块类体6.3类的创建和使用__init__()方法__init__方法是Python类中的一种特殊方法,方法名的开始和结束都是双下划线,该方法称为构造方法,当创建类的对象时,它被自动调用。
__init__方法中可以声明类所产生的对象属性,并可为其赋初始值。该方法有一个特点,不能有返回值,因为它是用来构造对象的,调用后实例化了一个该类型的对象。6.3类的创建和使用self参数构造方法是一个类创建对象的根本途径。如果开发者没有为该类定义任何构造方法,那么Python会自动为该类定义一个只包含一个self参数的默认的构造方法。类的实例方法按惯例有一个名为self的参数,并且必须是方法的第一个形参(如果有多个形参的话),self参数代表将来要创建的对象本身。模块7创建模块7.17.2导入模块7.1创建模块模块实际上是将一组函数放在一起共享公共的主题;将这些函数存储于一个.py文件中;使用import命令导入。
自定义模块的作用:规范代码,让代码更容易阅读。方便其他程序员使用已经编好的代码提高开发效率。模块的概述7.1创建模块创建模块,即创建一个.py文件,在其中包含用于完成任务的变量、类和函数,不包括main函数。
比如有这样一个文件addition.py,在addition.py中定义了函数fun_add()。然后在创建b.py的文件中引用文件addition.py,运行b.py就会执行addition.by程序。deffun_add(a,b):returna+b模块7创建模块7.17.2导入模块7.2导入模块使用import语句导入模块improt<模块名>调用格式:模块名.功能名importaddition#导入addition模块addition.fun_add(a,b)#执行模块中的fun_add()函数import<模块名>as<别名>调用格式:别名.功能名importadditionasa#导入addition模块并设置别名为aa.fun_add(a,b)#执行模块中的fun_add()函数7.2导入模块使用from...import语句导入模块from<模块名>import<功能名>调用格式:直接功能名fromadditionimportfun_add#导入addition模块的fun_add函数fun_add(a,b)from<模块名>import*(用*号一次性导入所有函数)调用格式:直接功能名fromadditionimport*#导入addition模块的全部定义(包括变量和函数)fun_add(a,b)文件操作8创建和打开文件8.18.2关闭文件2.3写入文件内容读取文件内容2.48.38.4使用Word编写一份简历的流程:打开新建一个Word文件写入个人简历信息保存文件关闭Word软件8.1创建和打开文件操作文件的整体过程和word写简历的过程类似:打开或新建立一个文件读/写数据关闭文件文件的打开在python中,使用open方法打开文件:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 收获机械制造工岗前设备巡检考核试卷含答案
- 堆取料机司机岗前技术实操考核试卷含答案
- 客运计划员安全强化竞赛考核试卷含答案
- 芳烃抽提装置操作工安全操作水平考核试卷含答案
- 飞机化学铣切工操作测试考核试卷含答案
- 换罐清渣工冲突解决水平考核试卷含答案
- 健康管理师技能竞赛强化考核试卷含答案
- 2026中国电线电缆行业技术创新趋势与研发投入研究报告
- 2026光刻胶产品售后技术服务模式创新与实践案例
- 2026母婴用品行业现状分析及市场需求与投资潜力研究报告
- 《管理学基础(第3版)》高职全套教学课件
- 安静的力量主题班会课件
- 《2025型钢采购合同》
- 快速换型SMED教学课件
- 保安大门岗培训
- 石油化工安装工程概算指标说明(2019版)
- 高等职业学校空中乘务专业 实训教学条件建设标准
- 雨季安全案例分享会
- 八年级数学学习探究诊断(上册)
- 《药事管理与法规》课件-项目六 药品生产质量管理
- 三子女协议书离婚协议书(2篇)
评论
0/150
提交评论