Python学习总结

 经过寒假集训15天对Python的学习,从一个小白已经入门。我很喜欢Python这门语言,因为它简洁灵活、易学、易读、可移植并且功能强大。     Python的核心内容是:模拟现实世界,从而解决现实世界的问题。

Pyhon的特点有以下几条:
1)语法结构简单而清晰(优雅);2)有着非常强大的类库(模块);3)胶水语言(可以使用c语言或者Java中的类库)4)纯面向对象的语言(万物皆对象)
Python的运行机制:
1)编译型:通过编译器,生成机器码文件。可以直接执行。 缺点:不能跨平台;优点:效率高。2)解释型:通过解释器,直接执行(逐行翻译并执行)。 缺点:效率低;优点:可跨平台。3)先编译后解释:既可以跨平台,又提高效率(相对于纯解释型)。 源代码:.py 编译器:compiler 字节码:.pyc .pyo 解释器:interpreter—PVM(Python Virtual Machine) 处理器:processer
Python基础数据类型python中的数据类型可以分为:字符串、布尔类型、整数、浮点数、数字、列表、元组、字典和日期。
字符串不可变对象,可使用单引号,双引号扩起来表示单行字符串,使用三引号表示多行字符串,在三引号可以自由的使用单引号和双引号。s=’hello world’ASCII码字符串比较特殊的是编码问题 我们知道,计算机是美国人发明的,最初只有127个字母被编码到计算机中,包括大小写字母、数字和一些符号,这个编码用两个字节表示一个字符。以Unicode表示的字符串用u’…'表示。表被称为ASCII码表。Unicode要处理一个中文显然一个字节是不够用的,又不能和ASCII码冲突,因此中国制定了GB2312编码。而全世界有很多的语言,在多语言混合的文本中,显示出来的话一定会有乱码,因此,Unicode应运而生,它将所有语言统一到一套编码中,就不会有乱码问题了。ASCII码用一个字节表示了一个字符,而UnicodeUTF-8经常在.py文件的开头写的"#coding:utf-8”,我们知道Unicode编码要比ASCII编码多一倍的存储空间,在存储和传输上会十分的不划算,如果写的文本全是英文的话,使用Unicode编码就十分浪费。于是UTF-8编码出现了,UTF-8编码是把一个Unicode字符根据不同的数字大小编码成1-6个字节,并且可以将ASCII码看成是UTF-8的一部分。布尔类型bool一个布尔值只有True和Flase两种值。##为什么True–,False–0? 答:bool类型是int类型的子类。整数int包括整数和负整数。浮点数float就是小数,整数和浮点数在计算机内部的存储是不同的,整数的运算永远是精确的,而浮点运算可能有四舍五入的误差。列表List[]list()list是一个是一个可变的有序表,是Python内置的一种数据类型,可以随时添加、删除、替换其中的元素。Python中的列表就是一个迭代器,我们知道Python是使用C编写的,那么list的内部实现是怎样的呢?Python中的列表是基于PyListObject实现的,PyListObject是一个变长对象,在内部通过一些方法维护列表的地址,进行内存管理等实现列表的功能。元组Tuplet=(1,2,3)除了元组以外的另一种有序表称为元组tuple,但是tuple一旦初始化便不能修改,在定义时,tuple的元素就被确定了。为什么要引入tuple呢?因为tuple不可变,所以代码更为安全,能用tuple代替list的情况就尽量使用tuple。
由于元组是不可变的,因此修改元素操作是非法的,但是可通过对元素进行连接组合,比如:tuple3 = tuple1 + tuple2。
使用del语句可删除整个元组。字典Dictd={‘one’:1,’two’:2}d=dict() 字典是Python中唯一的映射类型。Python内置了字典,使用key-value存储,具有极快的查找速度。和list相比,查找速度要高很多。为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。Dict和List的区别:Dict的查找速度和插入速度都是极快的,不会随着key的增加而增加;但dict要占用大量的内存,内存浪费多。
Dict是不可变对象,因为使用key来计算value的存储位置,为了保证结果的正确性,作为key的对象不能变,可使用字符串、整数等不可变的对象作为dict中的key。集合Sets={}s=set() 集合是一个无序的,不重复的数据组合,主要作用是:去重,把一个列表变成集合就自动去重;关系测试,测试两组数据之间的交集、差集、并集、子集、父集、对称(反向)差集等关系。set和dict类似,也是一组key的集合,但是不同的是在set中没有重复的key。可变和不可变 综上所述,Python中的不可变对象有:字符串、整数、元组;可变对象有:列表,集合,字典。
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,而对于不可变对象,虽然可以更改值,但是变量的值并不会发生改变。对于不可变对象,调用自身的任意方法,并不会改变对象自身的内容,这些方法会创建新的对象并返回,保证了不可变对象本身是永远不可变的。高级特性迭代器Python中的迭代器是什么呢?
迭代器是访问集合元素的一种方式,迭代器的对象是从集合的第一个元素开始访问,直到所有的元素访问完结束,迭代器只能前进而不能后退。
对于遍历支持随机访问的数据结构(tuple,list),迭代器相比于for循环并无优势,因为迭代器丢失了索引值。但对于无法随机访问的数据结构,迭代器是唯一的访问元素的方式。
迭代器不要求事先准备好整个迭代过程中的所有元素,迭代器仅在迭代到某个元素时才计算该元素,迭代器仅仅在迭代到某个元素时才计算该元素,在这之前或之后,元素可以不存在或者被销毁,这个特点使得迭代器特别适合用于遍历一些巨大的或是无限的集合。
迭代器中有两个基本的方法:
next方法:返回迭代器的下一个元素
__iter__方法:返回迭代器对象本身。生成器带有yield的函数在Python中被称为生成器。yield就是将函数变成了一个生成器,函数执行过程中使用yield就好像是用yield将执行中断多次,每次中断都会通过yield返回当前的迭代值。
当数据量较大时,使用生成器的效率更高。装饰器函数是一个对象,函数对象也可以被赋值给变量,所以,通过变量也能调用该函数。在代码运行期间动态增加功能的方式,称为装饰器。使用Python的@语法,把装饰器置于函数的定义处。元类类是用来描述如何生成一个对象的代码段,在Python中,类同样是一个对象,只要使用class关键字,Python解释器在执行的时候就会创建一个对象。这个对象自身拥有创建对象的能力,所以它是一个类,但它本身还是一个对象,因此,可以实现以下操作:可以将它赋值给一个变量、可以拷贝它、可以为它增加属性、可以将它作为函数参数进行传递。
这也是动态语言和静态语言最大的不同,函数和类的定义,不是编译时定义的,而是运行时动态创建的。也就是在Python中,可以动态的创建类,类也是对象,这就是使用关键字class时Python在幕后做的事情,这些都是通过元类实现的。
那么到底什么是元类呢?
元类就是用来创建类的东西,创建类就是为了创建类的实例对象,但是我们知道类就是对象,元类就是用来创建这些类(对象)的,所以元类就是类的类。
元类是创建类这种对象的东西,可以将元类称为类工厂。
元类的主要用途是创建API。进程和线程进程和线程的关系:(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)处理机分给线程,即真正在处理机上运行的是线程。(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体。进程与线程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。协程协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程。协程的优点:(1)无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能(但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力)。(2)无需原子操作锁定及同步的开销。(3)方便切换控制流,简化编程模型。(4)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。正则表达式正则表达式是一种小型的,高度专业化的编程语言。它内嵌在Python,通过re模块来实现的。(1)可以为想要匹配的相应字符串指定查找规则。(2)可以利用re模块一多种方式修改或者查找字符串。运行原理:正则表达式被编译成一列写的字节码,后由c编写的匹配引擎进行执行。注意:正则表达式语言相对小型,受限(功能强大,但是并非所有的字符串处理都可以使用正则表达式)。

你可能感兴趣的:(Python学习总结)