Python ???
- Python是一种解释型语言。与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。
- Python是动态类型语言。指的是在声明变量时,不需要说明变量的类型。
- Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access specifier,类似C++中的public和private),这么设计的依据是“大家都是成年人了”。
- 在Python语言中,函数是第一类对象(first-class objects)。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类(class)也是第一类对象。
- Python代码编写快,但是运行速度比编译语言通常要慢。好在Python允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。numpy就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过Python实现的。
- Python用途非常广泛——网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。
- Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。
Python 2.7.x 和 3.x 版本的重要区别
- 使用future模块
- print函数
- 整数除法
- Unicode
- xrange
- 触发异常
- 处理异常
- next()函数和.next()方法
- For循环变量与全局命名空间泄漏
- 比较无序类型
- 使用input()解析输入内容
- 返回可迭代对象,而不是列表
变量、引用、可变对象、不可变对象
所有的变量都可以理解是内存中一个对象的“引用”。
这里记住的是类型是属于对象的,而不是变量。
对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。
在python中,strings, tuples,numbers是不可更改的对象,而list,dict等则是可以修改的对象。不可更改的对象,能当做字典的key,可更改对象不能做字典的key。
Http请求头
- Accept : 指浏览器或其他客户可以接爱的MIME文件格式。可以根据它判断并返回适当的文件格式。
- Accept-Charset:指浏览器可以接受的字符编码。英文浏览器的默认值是ISO-8859-1.
- Accept-Language:指出浏览器可以接受的语言种类,如en或en-us,指英语。
- Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式。
- Cache-Control:设置关于请求被代理服务器存储的相关选项。一般用不到。
- Connection:用来告诉服务器是否可以维持固定的HTTP连接。HTTP/1.1使用Keep-Alive为默认值,这样,当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都建立连接。
- Content-Type:用来表名request的内容类型。可以用HttpServletRequest的getContentType()方法取得。
- Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能。
常见响应状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误——请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态代码 | 状态描述 | 说明 |
---|---|---|
200 | OK | 客户端请求成功 |
400 | Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
401 | Unauthorized | 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 |
403 | Forbidden | 服务器收到请求,但是拒绝提供服务 |
404 | Not Found | 请求资源不存在,输入了错误的URL |
500 | Internal Server Error | 服务器发生不可预期的错误 |
503 | Server Unavailable | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
面向切面编程AOP和装饰器
- AOP(Aspect Oriented Programming)的缩写,意为:面向切面编程
- 装饰器是一个很著名的设计模式(装饰者模式),经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。
- 概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
http://taizilongxu.gitbooks.io/stackoverflow-about-python/content/3/README.html
新式类和旧式类
- 新式类很早在2.2就出现了,所以旧式类完全是兼容的问题.
- Python3里的类全部都是新式类.
- 新式类是在创建的时候继承内置object对象,而经典类是直接声明的。
- MRO问题(新式类是广度优先,旧式类是深度优先)
http://www.cnblogs.com/btchenguang/archive/2012/09/17/2689146.html
可以帮助查找python的bug和进行静态的代码分析的工具
- PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告
- Pylint是另外一个工具可以进行codingstandard检查
单下划线和双下划线
- __foo__ : 一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突.
- _foo : 一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.
- __foo : 这个有真正的意义:解析器用 _classname__foo来代替这个名字,以区别和其他类相同的命名.
进程池基本流程
1)实例化进程池 p=Pool()。
2)通过apply_async()函数向进程池中添加进程。
3)通过p.close()函数关闭进程池,关闭之后无法继续添加新的进程。
4)通过p.join()函数等待所有进程被取出并执行完毕。
import multiprocessing
import time
def func(msg):
print(msg)
time.sleep(2)
print("end")
if __name__ == "__main__":
pool = multiprocessing.Pool(processes = 3)
for i in range(5):
msg = "hello %d" %(i)
pool.apply_async(func, (msg, )) #维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
print "Mark~~~~~~~~~~~~~~~~~~~~~~"
pool.close()
pool.join() #调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
print "Sub-process(es) done."