笔试面试的一些准备。。。

2018-07-06-python学习语法篇

2018-07-11  本文已影响7人  最初的美好_kai

一、基础知识

1.数据类型

数据类型主要有整数型(整数连除法都是整数的,用地板除//,浮点数(其实就是小数,这么说是因为小数点是可以浮动的),布尔值(True,False,注意有and,or,not三种运算),字符串(注意Python3中要用单引号或者双引号包括起来,然后转义还是用\符号,然后就是r可以去掉转义作用),空值None(注意不是NULL),然后就是常值一般用全大写表示。

2.字符串编码问题

一开始全世界都是ascii编码,毕竟计算机都是老美发明的,然后由于各国语言输入需要,所以开始变成unicode编码,因为Unicode编码可以将所有语言都编码出来,unicode编码是定长编码(除了极少部分的字符以外),然后这样英文编码就很浪费,所以就改成utf-8编码(变长编码),这样就节省空间,一般Unicode和utf-8之间的关系是这样的:内存中都是Unicode编码,然后当涉及在硬盘中存储以及传输数据的时候就转变为utf-8编码。

图一t 图二

然后再次科普一下utf-8,utf-16,utf-32的区别,utf-8用1-8个字节来编码,utf-16用两个或者四个字节来编码,utf-32用四个字节来编码,所以utf系列并不一定是变长编码。

然后学一下所谓的编码问题,首先是chr函数与ord函数,一个是整数变字符,一个是字符变整数。

然后介绍两个函数,一个是encode,一个是decode,用法是比如'oppo'.encode('utf-8')等。

然后是如果需要把数据转换为数据流的话,我们就需要加个b,例如x=b'oppo'

然后就是如何指定文档使用编码,用法是:#  -*- coding:utf-8  -*-

然后就是格式化字符串的问题,主要和c语言的做法差不多,但提供了一个format函数给你用,很方便,用法是在需要格式化的地方加上{编码,从0开始},然后就是后面要加上.format(),括号里面再加上所谓的需要填的输入就可以了。

3.list和tuple

list是一个有序的数据集合,可以包含不一样的数据类型,常用的方法有append(),insert(),pop(i),替换的话就用二维数组的方法去解决就好了。

然后就是tuple,元组,和list不同的地方在于他初始化以后就不可改变了,这种不可改变指的是我们的指针地址不可改变,而不是内容不可改变,如果tuple里面有list的话,其实list是可以改变的,然后tuple就没有append,insert,pop这些方法了。

4.dict以及set

首先说一下dict,这玩意主要采用哈希表的方法来存储,通过建立索引表达到快速搜索的目的,主要是用空间换时间的一种做法,相对而言的就是我们的list就是一种省内存省空间但是换时间的一种做法,耗时间比较多。

dict要注意初始化定义key以后后面就不能改变key了,主要有get以及pop两种方法。get是用来获取key值的。

set是集合的意思,他有key却没有value,然后没有重复值,拥有add和remove两个方法。

5.函数

常用abs()绝对值,len(),max()等等....然后就是数据类型转换,如int(),str(),float(),bool等。

定义函数的时候就先def,然后接上函数名称,括号,函数参数,冒号,接着缩进写函数体,最后接上return,return的时候可以同时返回多个返回值(其实Python是自动生成一个tuple,然后把多个返回值赋值给tuple,将tuple再返回来的),如果没有返回语句就会返回None,这时候需要我们手动写上pass当占位符。

6.参数

参数一共有五种,位置参数、默认参数、可变参数、关键字参数、命名关键字参数。

位置参数就是和c语言差不多,没啥好说的。

默认参数就是预先在函数头部括号里面给他设置值,然后就可以随意使用了。

可变参数的定义是参数加一个*,然后就可以尽情地使用了。

关键字参数是拥有key的参数,然后定义是使用双**,来定义的,然后可传一个list或者tuple进去就行了。

命名关键字参数是使用时必须传入参数名,如果没有可变参数,就传入一个*当分隔符,如果有了就直接加在可变参数后面定义就行了。

最后是所谓的参数组合,主要要符合一定的顺序,这个顺序是这样的:

先位置参数,然后默认参数,接着可变参数,然后是关键字参数,最后是命名关键字参数。

7.递归和尾递归(一图言掉)

图三

二、高级特性

1.切片:主要是按照一定规律切取目标中的一部分元素出来,主要以对list的切片来举例子,我们先生成range(100),就生成了0到99之间的数字,赋值给L,然后L[0(默认从0开始):100(默认最后一个元素):3(每隔多少个就取一个数字)],然后还可以使用-1来表示倒数的数字,就差不多这样了。

2.迭代:这里迭代指的就是遍历,对于list而言,迭代可以直接通过下标来完成,而对于其他如dictionary类型而言,迭代默认是迭代key,如果你想要迭代value的话,可以通过d.values()来完成,然后就是同时迭代key和values的话,就通过d.items()来完成。

判断一个对象是否是可迭代对象可通过collections中的Iterable类型来判断

图四

接着是如何同时迭代下表和内容呢,答案很简单,就是直接通过enumerate来完成,把list放进该方法再加上for循环迭代体就完成了。

3.列表生成式

主要是用来生成列表的,通过在列表中引进for循环表达式以及if判断式子来达到高效率表达的作用,格式是这样的,[ x(生成什么元素)  for(for语句可用来从别的列表中获取数据)if (if语句主要用来判断) ]

4.生成器

主要是用来解决List存储空间过大的问题,因此用generator来创建生成器对象,生成器保存有list中元素生成的方法,但只有用到的时候才会生成,这样就节省大量空间。生成方法有两种,一种是生成列表的时候(要用列表生成式)将[]改成(),其次是在函数里面将return改成yield,这个有一个作用就是运行的时候用上直接返回数值并停止,下次运行的时候需要从下一句开始运行,然后生成的时候使用生成器对象的形式来生成的!!!

5.迭代器

可直接作用于for循环的对象称为迭代器对象,都是iterable,可以使用isinstance()判断一个对象是否是Iterable对象,但是不一定是iterator对象,生成器才是一个iterator对象,然后就是Iterable对象可以通过iter方法来生成iterator对象。以上!

三:高阶函数

1.map&&reduce&&filter&&sorted

map主要接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到每个列表元素上,并返回iterator上面。

reduce主要将接收到的函数作用在一个序列上面,这个函数必须接收两个输入,reduce将取列表中下一个元素以及上一次的运行结果作为输入,此外,reduce需要从functools引进。

filter函数主要是接收一个列表和一个函数,与map不同的是,他将函数作用在每个序列元素以后,再根据返回值是True或者false来决定留下哪一个元素,进入对序列起到筛选作用。

sorted函数主要接收两个参数,一个是列表,一个是key函数,还可以加个reverse,key函数会作用在列表中每个元素里面再进行排序。

2.几种函数技巧

返回函数,主要是将函数作为返回值来返回,返回以后可以再自己调用执行,这里有一个技巧叫闭包,主要思想是在函数里面再定义函数,这样的话就返回这个函数以后她还可以调用母函数里面的局部值等等,但是要注意他是出来再执行的,因此要注意不能用到会变化的值,如果实在要用的话,那就在函数里面先把它执行了再返回出来。

匿名函数,其实就是lambda表达式,格式是这样的,lambda参数1,2:表达式,大致如此。

装饰器在我理解就是把函数当成变量,然后就是拥有自己的一些属性,例如__name__等,当我们需要定义自己的属性值的时候,就用函数定义起来,然后在需要装饰的函数那里前面加上@装饰函数名就好了。

偏函数呢,其实就是所谓的把函数参数进行一个简化设置默认值的方法,说白了呢,就是通过调用functools这个模块中partial中的方法,来简化参数,他有两个参数,一个放进函数,一个放你想设置的默认值(这里其实可以放多个)。

上一篇下一篇

猜你喜欢

热点阅读