python概述的答案_第1章Python概述

python概述的答案_第1章Python概述

2023年6月29日发(作者:)

python概述的答案_第1章Python概述1.1Python发展历程1989,为了度过圣诞假期,(龟叔)Guido开始编写Python语⾔编译器。Python这个名字来⾃Guido的喜爱的电视连续剧《蒙蒂蟒蛇的飞⾏马戏团》。他希望新的语⾔Python能够满⾜他在C和Shell之间创建全功能、易学、可扩展的语⾔的愿景。1989年由荷兰⼈Guido van Rossum于1989年发明,第⼀个公开发⾏版发⾏于1991年Granddaddy of Python web frameworks, Zope 1 was released in 1999Python 1.0 - January1994增加了 lambda, map, filter and 2.0 - October 16,2000,加⼊了内存回收机制,构成了现在Python语⾔框架的基础Python 2.4 - November 30,2004, 同年⽬前最流⾏的WEB框架Django诞⽣Python 2.5 - September 19,2006Python 2.6 - October 1,2008Python 2.7 - July 3,2010Python 3.0 - December 3,2008Python 3.1 - June 27,2009Python 3.2 - February 20,2011Python 3.3 - September 29,2012Python 3.4 - March 16,2014Python 3.5 - September 13,20151.2编程语⾔排⾏榜今天,世界上有将近600种编程语⾔,但也有20种流⾏语⾔。如果你听说过TIOBE排名,你知道编程语⾔的普遍流⾏。这是过去10年中最常⽤的20种编程语⾔的变化图。【2019年11⽉】1.3Python的应⽤领域0、WEB开发Python拥有很多免费数据函数库、免费web⽹页模板系统、以及与web服务器进⾏交互的库,可以实现web开发,搭建web框架,⽬前⽐较有名⽓的Python web框架为Django(相当于JavaEEssm)。从事该领域应从数据、组件、安全等多领域进⾏学习,从底层了解其⼯作原理并可驾驭任何业内主流的Web框架。1. 桌⾯软件Python在图形界⾯开发上很强⼤,可以⽤tkinter/PyQT框架开发各种桌⾯软件!2. ⽹络编程⽹络编程是Python学习的另⼀⽅向,⽹络编程在⽣活和开发中⽆处不在,哪⾥有通讯就有⽹络,它可以称为是⼀切开发的“基⽯”。对于所有编程开发⼈员必须要知其然并知其所以然,所以⽹络部分将从协议、封包、解包等底层进⾏深⼊剖析。3. 爬⾍开发在爬⾍领域,Python⼏乎是霸主地位,将⽹络⼀切数据作为资源,通过⾃动化程序进⾏有针对性的数据采集以及处理。从事该领域应学习爬⾍策略、⾼性能异步IO、分布式爬⾍等,并针对Scrapy框架源码进⾏深⼊剖析,从⽽理解其原理并实现⾃定义爬⾍框架。4. 云计算开发Python是从事云计算⼯作需要掌握的⼀门编程语⾔,⽬前很⽕的云计算框架OpenStack就是由Python开发的,如果想要深⼊学习并进⾏⼆次开发,就需要具备Python的技能。5. ⼈⼯智能MASA和Google早期⼤量使⽤Python,为Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语⾔中脱颖⽽出,各种⼈⼯智能算法都基于Python编写,尤其PyTorch之后,Python作为AI时代头牌语⾔的位置基本确定。6. ⾃动化运维Python是⼀门综合性的语⾔,能满⾜绝⼤部分⾃动化运维需求,前端和后端都可以做,从事该领域,应从设计层⾯、框架选择、灵活性、扩展性、故障处理、以及如何优化等层⾯进⾏学习。7. ⾦融分析⾦融分析包含⾦融知识和Python相关模块的学习,学习内容囊括NumpyPandasScipy数据分析模块等,以及常见⾦融分析策略如“双均线”、“周规则交易”、“⽺驼策略”、“Dual Thrust 交易策略”等。8. 科学运算Python是⼀门很适合做科学计算的编程语⾔,97年开始,NASA就⼤量使⽤Python进⾏各种复杂的科学运算,随着NumPy、SciPy、Matplotlib、Enthought librarys等众多程序库的开发,使得Python越来越适合做科学计算、绘制⾼质量的2D和3D图像。9. 游戏开发在⽹络游戏开发中,Python也有很多应⽤,相⽐于Lua or C++,Python⽐Lua有更⾼阶的抽象能⼒,可以⽤更少的代码描述游戏业务逻辑,Python⾮常适合编写1万⾏以上的项⽬,⽽且能够很好的把⽹游项⽬的规模控制在10万⾏代码以内。1.4Python特点(1)Python是完全⾯向对象的语⾔。1.函数模块数学字符串都是对象,在python中⼀切皆对象。2.完全⽀持继承,重载,多重继承。3.⽀持重载运算符,也⽀持泛型设计。(2)Python拥有⼀个强⼤的标准库,Python语⾔的核⼼只包含数字,字符串,列表,字典,⽂件等常见的类型和函数,⽽由Python标准提供了系统管理,⽹通通信,⽂件处理,数据库接⼝,图形系统,XML处理等额外的功能。(3)Python社区提供了⼤量的第三⽅模块,使⽤⽅式与标准库类似,他的功能涵盖科学计算、⼈⼯智能、机器学习、Web开发、数据库接⼝、图形系统多个领域。(4)解释性语⾔编译型:⼀次性将【源代码】编译成【⼆进制⽂件010010】。缺点:开发效率低,不能跨平台。优点:运⾏速度⾼。语⾔:CC++等…C和C++编译型语⾔:源代码à0100000Python和java都是解释性语⾔源代码à字节码à010000解释型:当程序执⾏先将【源代码py】编译成【字节码pyc】,再有解释器对【字节码pyc】逐⾏解释成【⼆进制01001101】最后交给CPU执⾏。优点:开发效率⾼,可以跨平台。缺点:运⾏速度慢。(5).强类型定于语⾔1.⼀旦⼀个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个类型了。2.在速度上可能略逊⾊于弱类型语⾔。3.严谨性能够有效的避免许多错误。(6).动态类型语⾔1.运⾏期间采取对数据类型进⾏检查2.不⽤给任何变量指定数据类型,该语⾔会在你第⼀次被变量赋值,在内部将数据类型记录下来。1.5Python版本与分类版本Python2源码不标准,混乱、重复代码太多。Python3统⼀标准,去除重复代码。分类cpython先转换C语⾔能识别的【字节码】=>再转换成CPU能识别的【01001010】jypython先转换成Java能识别的【字节码】=>在转换成系统能识别的01001010ironpythonMicroPython⽤于微控制器pypy⼀次性全部编译成字节码,运⾏速度快,但开发效率相对慢。其他语⾔python1.6Python的安装1).安装python2和3的虚拟机2).配置环境变量Path=C:UsersAdministratorAppDataLocalProgramsPythonPython37Path=C:UsersAdministratorAppDataLocalProgramsPythonPython273).测试Python3x:python⽂件路径回车Pytnon2x:python2⽂件路径回车cmdàpythonà回车4).编写第⼀个python程序创建python代码源⽂件5).打开命令⾏pythonE:回车python2E: 回车6).退出pythonexit()7).python2 和python3的区别Python2 ascii码Python3 utf-8解决⽅法:在源代码⽂件头增加#-*- encoding:utf-8 -*-1.7Pycharm使⽤2、选择Windows系统的专业版,将其下载到本地,如下图所⽰:3、双击下载的安装包,进⾏安装,然后会弹出界⾯:4、选择安装⽬录,Pycharm需要的内存较多,建议将其安装在D盘或者E盘,不建议放在系统盘C盘:5、点击Next,进⼊下图的界⾯:Create Desktop Shortcut创建桌⾯快捷⽅式,⼀个32位,⼀个64位,我的电脑是64位系统,所以选择64位。勾选Create Associations是否关联⽂件,选择以后打开.py⽂件就会⽤PyCharm打开。6、点击Next,进⼊下图:默认安装即可,直接点击Install。7、耐⼼的等待两分钟左右,如下图:8、之后就会得到下⾯的安装完成的界⾯:9、点击Finish,Pycharm安装完成。接下来对Pycharm进⾏配置,双击运⾏桌⾯上的Pycharm图标,进⼊下图界⾯:选择Do not import settings,之后选择OK,进⼊下⼀步。10、选择Accept,进⼊下⼀步:11、进⼊激活界⾯,选择第⼆个License server,如下图所⽰:12、Pycharm激活后13、激活之后会⾃动跳转到下图界⾯,选择IDE主题与编辑区主题:建议选择Darcula主题,该主题更有利于保护眼睛,⽽且看上去也⾮常不错~~~14、选择OK之后进⼊下图界⾯:选择Yes即可,更换IDE主题。15、之后进⼊下图界⾯:16、点击Create New Project,进⼊如下图的界⾯:⾃定义项⽬存储路径,IDE默认会关联Python解释器。选择好存储路径后,点击create。17、IDE提供的提⽰,直接close即可,不⽤理会。18、进⼊的界⾯如下图所⽰,⿏标右击图中箭头指向的地⽅,然后选择New,最后选择python file,在弹出的框中填写⽂件名(任意填写),本例填写:helloworld。19、之后得到下图,然后点击OK即可:20、⽂件创建成功后便进⼊如下的界⾯,便可以编写⾃⼰的程序了。这个界⾯是Pycharm默认的界⾯,⼤家完全可以⾃⼰去setting中设置⾃⼰喜欢的背景和字体⼤⼩、格式等等。1.8运⾏原理1).程序要在计算机中运⾏,三个核⼼硬件必不可少,分别是CPU、内存和硬盘。CPU:中央处理器,负责处理数据和计算内存:临时存储数据(断电之后,数据会消失),读取速度快,空间⼩硬盘:永久存储数据,读取速度慢,空间⼤2).python程序执⾏原理(1).操作系统会⾸先让CPU把【python解释器】的程序加载到内存中(2).[python解释器]读取硬盘中的【python源代码】,解释器让CPU根据语法规则从上到下翻译【python原代码】翻译成【字节码】(3).然后【python解释器】再将【字节码】解释【⼆进制机器码】。(4).最后CPU执⾏【⼆进制机器码】。Python源代码 【py】à字节码 【pyc】à⼆进制码【010001010】#将源代码编译成字节码Python -m源代码.py1.9内存与对象管理*变量⽆须事先声明*变量⽆须指定类型*程序员不⽤关⼼内存管理*变量名会被回收*del语句直接释放资源*id语句检查引⽤地址【变量定义】Python中的变量只要在使⽤之前声明且位置不受限制,但需要注意的是变量只有赋值之后才会分配内存块供外界访问。[控制台输出]【清理对象】使⽤del(地址)的⽅式清理内存中,不再使⽤的地址。[控制台输出]【动态类型】Python声明变量⽆须类型,对象的类型和内存占⽤量是在运⾏时根据等于号(=)值类型和⼤⼩确定的。[控制台输出]【内存分配与销毁】Python创建对象分配内存时,解析器根据代码借⽤系统资源。使⽤结束后,在适当的时候释放系统资源。所以python程序员不⽤担⼼内存释放问题。尽管去声明对象python内部有垃圾回收GC程序⾃动释放资源。但python也提供⼿动释放资源的⽅法,格式:del(地址)注意:del(地址)不是必须的【引⽤计数和类型引⽤】Python中的对象,分为引⽤和对象,对象中存储数据保存在堆中,引⽤中保存对象在堆中的具体位置保存在栈中。在对象的内存块中,有⼀个 HEAD部分存储着引⽤计数器(指向对象的引⽤个数count)和类型引⽤(该对象属于什么类型)type(地址)【引⽤计数】当程序执⾏到第⼀⾏Num1=100,此时指向100这个对象的引⽤只有⼀个为Num1当程序执⾏到第⼆⾏Num2=Num1,此时指向100这个对象的引⽤有两个Num1,Num2当程序执⾏到到第三⾏Num3=Num2,此时指向100这个对象的引⽤有三个Num1,Num2,Num3.当程序执⾏到第四⾏,Num2=200, Num2引⽤指向200这个对象,不再指向100,所以指向100这个对象的引⽤随之减少。执⾏两个Num1和Num3【获取地址】Python语⾔提供获取对象地址的函数id(引⽤名称)。通过该函数就可以轻松获得对象的引⽤地址。[控制台输出]【类型检查】Python提供类型检查函数type(引⽤),就可以获得该地址指向对象的具体类型。[控制台输出]注意:type类型是python语⾔中的顶级类型。[id语句]Id(引⽤)可以查看引⽤的具体内存地址[控制台输出]【None对象】None代表空,它的布尔值总是False[del语句]Python中提供⼿动删除引⽤语句[del引⽤名]。注意:当删除掉⼀个对象的引⽤,如果这个对象没有任何引⽤指向它,它就是待回收对象,随时会被垃圾回收程序从内存中擦除。【垃圾回收】没有任何引⽤(地址)指向的对象(内存块),会被垃圾收集器回收并释放,python的解释器负责跟踪对象的引⽤计数器,垃圾收集器负责查找引⽤计数器等于0的对象。它也负责哪些虽然引⽤计数⼤于0但也需要被销毁的对象。因为python中存在特定情况会导致循环引⽤。【循环引⽤问题】当⾄少两个对象互相引⽤时,也就是所有的引⽤都消失是,这个对象的引⽤依然存在。也就是说引⽤计数器并不能准确判断这种情况。Python的垃圾收集器实际上是⼀个引⽤计数器和⼀个循环垃圾收集器。当⼀个对象的引⽤计数为0时,解释器会暂停对该对象的跟踪。作为引⽤计数器的补充,垃圾回收器也会留⼼哪些分配总量⼤,但是没有通过引⽤计数销毁的对象。这种情况解释器会暂停,并清理所有未引⽤的循环。【总结】CPython都是基于堆栈的虚拟机 字节码 解释型语⾔。不同于Java语⾔的是,cpython将所有类型(基本类型和引⽤类型)对象都保存到堆中,⽽不是像Java将基本类型保存到栈空间,将体积⽐较⼤的对象保存到堆空间。以cpython3.6为例,使⽤⾃定义分配器管理堆,根据对象⼤⼩在堆中开辟相应的内存空间。如果使⽤cpython声明⼀个基本类型的变量,例如:x=1,虚拟机将会为1在堆上创建对象。每个对象包含两个部分,头部(PyObject_HEAD)和⼀些可变对象的特定字段。头部对象包含两个8字节,⼀个是引⽤计数器,⼀个是指向对象类型的指针。这意味着16字节是⼀个CPython对象⼤⼩的下限。Cpython中的ASCII字符串对象(PyASCIIObject)使⽤48字节的头部,所以⼀个长度为1两个字节的字符串(如a加⼀个空⽩终⽌符)占⽤50个字节;长度为10的字符串将占⽤59个字节;可变对象在cpython中,可变对象以pyGC_HEAD结构体增加了头部。这个机构⽤来进⾏回收跟踪。占⽤24个字节。总的来说,⼀个PyListObject长度为64字节,但同样需要为列表中的每个对象添加指针,这些指针存储在⼀个数组中,并分配每个对象的存储空间。垃圾回收头部如何跟踪cpython对象的牢记回收可能是程序员最不容易理解的部分,cpython使⽤计数器,可以很容易的追溯⼀个对象的引⽤;每当⼀个对象被复制,或许放⼊列表,插⼊⼀个字典等等,他的计数器都会增加,⽽当⼀个引⽤变⼩,例如使⽤del()操作或许⼀个变量超出范围,计数器相应的减少。⽽当计数器为0是,对象将会被回收。参考原⽂:【Python中堆栈】内存中的堆栈和数据结构堆栈不是⼀个概念,可以说内存中的堆栈是真实存在的物理区。内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区⼜分为栈区和堆区。代码区:存储⽅法体的⼆进制代码。⾼级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执⾏代码的切换。静态数据区:存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统⾃动分配和回收。栈区:存储运⾏⽅法的形参、局部变量、返回值。由系统⾃动分配和回收。堆区:new⼀个对象的引⽤或地址存储在栈区,指向该对象存储在堆区中的真实数据。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687976309a62717.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信