1 闭包
定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个参数a, 内层函数依旧传入一个参数b, 内层函数使用a和b, 最后返回内层函数)
代码:
def ExFunc(n):
sum=n
def InsFunc():
return sum+1
return InsFunc
2 装饰器
定义:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短
def debug(func):
def wrapper():
print ""[DEBUG]: enter {}()"".format(func.__name__)
return func()
return wrapper
@debug
def say_hello():
print ""hello!"""
3 迭代器
iter(),配合for循环使用,可以控制循环的进度,使用next()函数获取下一个值,直至遇到StopIteration停止循环
4 生成器
也是一种迭代器,配合yield使用,返回yeild后面的值,下次运行从yield开始
5 描述器
描述器的表现
用到三个魔术方法。__get__() __set__() __delete__()
方法签名如下:
object.__get__(self,instance,owner)
object.__set__(self,instance,value)
object.__delete__(self,instance)
Self指指代当前实例,调用者。
Instance是owner的实例。
Owner是属性所属的类。
典型的描述器:@Property
作用:访问类和实例的属性
6 内置模块
os、json、re、sys
7 内置函数
zip()、list()、set()、eval()、int()、 str()、max()、min()、tapy()、id()、super()、sum()
8 列表特点
使用 "列表:无序、可增删改查、可下标查询
内置函数使用:len(列表)、max(列表)、min(列表)、list(元组)
添加:列表.append(值)
修改:列表[下标] = 值
插入:列表.insert(下标,值)
删除:列表.remove(值) del 列表[下标] 列表.pop()默认最后一个值
查看:列表.index(下标) "
9 字符串特点,使用 "切片:str[开始下标 : 结束下标 : 相隔字符]
super()大写 lower()小写 replace()替换 spli()分割"
10 TCP/UDP
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但 UDP也是无法避免攻击的,比如:UDP Flood攻击……
UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。
小结TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 ………… 什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……
有些应用场景对可靠性要求不高会用到UPD,比如长视频,要求速率"
11 HTTP/HTTPS协议
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
区别:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。"
12 深/浅拷贝
浅拷贝:拷贝表面层,更深的层次引用原来地址的,说明:如果拷贝的数据更改,原数据也跟着变浅拷贝list.copy()
深拷贝:拷贝所有,内存中开辟新地址,说明:如果拷贝的数据更改,原数据没有变深拷贝shallowCopy(list)"
13 __new__ 和 __init__的区别
1、 继承自object的新式类才有__new__
2、 __new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
3、 __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来 的实例
4、 __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值"
14 线程、进程和协程
线程:轻量级进程,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个 进程的其它线程共享进程所拥有的全部资源
使用threading这个高级模块
多个线程访问同一资源时需要加线程锁lock
获取锁:lock.acquire()
释放锁:lock.release()
进程:进程是一个实体。每一个进程都有它自己的地址空间
创建进程的类:process
协程:一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。
优点:IO资源、减少callback的使用
用第三方库 gevent 来支持协程。gevent用到的主要模式是greenlet"
15 内存管理
1、 Python引入了一个机制:引用计数
2、 垃圾回收机制:当引用计数为0时,调用__del__方法
注意:
1、垃圾回收时,Python不能进行其它的任务,频繁的垃圾回收将大大降低Python的工作效率;
2、Python只会在特定条件下,自动启动垃圾回收(垃圾对象少就没必要回收)
3、当Python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动。
4、内存池机制
Python中有分为大内存和小内存:(256K为界限分大小内存)
1、大内存使用malloc进行分配
2、小内存使用内存池进行分配
3、Python的内存池(金字塔)"
16 随机数据
random.shuffle(lst):将列表中的元素打乱,洗牌
random.random():生成一个0-1之间的随机浮点数.
random.uniform(a, b):生成[a,b]之间的浮点数."
17 一行带实现1-100之和 sum(range(1,101))
18 python2和python3的区别
1.print 2 - 没有括号 3 - 右括号
2.input 2 - int 3 - str
3.unicode 2 - 对str不友好 3 - utf-8
4.不等运算符 2 - 有<> 3 去掉了
5.数据类型 2 - long 3 去掉了"
19 Linux常用命令
ls、cd、vim、mkdir、pwd、rm、rmdir、mv、cp、cat、find、head、history、tail、grep、chmod、tar、ps、top、kill、free、
20 python中json.loads与eval的区别
1.json.lodes()可以将英文字符串转化为types.UnicodeType,eval可以将因为字符串转化为tape.stringtape
2.json.lodes()可以将字符串中的unll空值转化为None,eval会报错
3.json.lodes()不可以将字符串中的运算输出结果,eval会输出结果"