学自
廖雪峰的官方网站
1.Python简介:
1.1.Python是用来编写应用程序的高级编程语言。大小写敏感
1.2.Python适合开发哪些类型的应用
首选是网络应用,包括网站、后台服务等等;
其次是许多日常需要的小工具,包括系统管理需要的脚本任务等等;
另外就是把其他语言开发的程序再包装起来,方便使用。
1.3.Python的缺点
1)运行速度慢
2)代码不能加密
1.4.#开头的语句是注释,
2.简单使用
2.1.输入 name = raw_input(">")输入的是字符串,
可以用int(name)转为 int
输出 print name
2.2.数据类型
浮点数 1.23x10^9 = 1.23e9
2.3.空值 用None表示
2.4.编码问题,首行加入
# -*- coding: utf-8 -*- #廖雪峰的官方网站编码篇
2.5.
list:l=['name1','name2','name3']
list 元素可以不同,可以是另一个元素
l.append('name4'):在 list的最后加入
l.insert(1,'newname2'):把元素插入到指定的位置
l.pop([1]): 删除元素,默认末尾,(指定元素)
l[1]='newname2': 替换元素,直接赋值
l.sort(): 排序
2.6.tuple:
demo=('name1','name2')
但是tuple一旦初始化就不能修改,
只有1个元素的tuple定义时必须加一个逗号',': t=(1,)
2.7.if
if x>3:
...
elif x>1:
...
else:
...
2.8.循环
for x in list:...
while true:
2.9.dict:
d={'name':'zansan','nianl':80}
key是不可变对象。
查找和插入的速度极快,不会随着key的增加而增加;
需要占用大量的内存,内存浪费多。
'name' in d: 判断 key是否存在
d.get('name'[,-1]): 如果 key不存在,则返回None/自设值
d.pop('name'):删除元素
2.10.set: 一组key的集合,但不存储value,key不能重复
s = set([1, 2, 3])
s.add(4): 添加元素
s.remove(4): 删除元素
s1&s2 / s1|s2:可做交集、并集等操作
3.函数
可以返回多个值,返回的是一个tuple(元祖)
3.1.定义
def x([n=1]): 设定默认参数
def x(*n): 可变参数(n当 tuple用),传列表时,x(*list)
def x(name,age,**kw): 关键字参数(kw当 dict用),
传参时,x('zs',37,job='xx',city='xxx'),传dict,x(**dict)
参数可组合使用:顺序必须是:必选参数、默认参数、可变参数和关键字参数。
3.2.递归函数
4.高级特性
4.1.切片: list[0:3]: 取得前三个元素
4.2.迭代: dict迭代的是key,
如果要迭代value,可以用for value in d.itervalues(),
如果要同时迭代key和value,可以用for k, v in d.iteritems()。
判断是否可迭代:
from collections import Iterable
isinstance('abc', Iterable)
4.3.列表生成式: [x for x in range(1, 11)] 通过for 生成一个 list
eg:
>>> [x * x for x in range(1, 11) if x % 2 == 0]
>>>[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
4.4.生成器:
g = (x for x in range(10)): 列表生成式的[]改成()
一边循环一边计算的机制,称为生成器,节省大量的空间
g.next() 调用
在函数中使用 yield,创建生成器
5.函数式编程
5.1.高阶函数: 让函数的参数能够接收别的函数。
def add(x, y, f):
return f(x) + f(y)
5.2.map/reduce:
map:2个参数,将第一个参数的函数作用于第二个参数list中的每个元素
>>> map(str, [1, 2, 3]),
--['1', '2', '3']
reduce:与 map类似,但函数需接收2个参数
reduce(f, [x1, x2, x3, x4]) == f(f(f(x1, x2), x3), x4)
5.3.filter: 过滤序列
接收一个函数和一个序列
依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
def xx(x):
if x < 30:
return True
else:
return False
print filter(xx, [1, 2, 340, 20, 11])
--[1, 2, 20, 11]
5.4.sorted: 排序
sorted(list[,f]) f(函数)
5.5.返回函数
5.6.匿名函数:lambda 表示匿名函数,冒号前面的x表示函数参数。
不用写return,返回值就是该表达式的结果。
lambda x: x * x
5.7.装饰器:
代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)
简单的写法, #
编写函数调用日志
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print '%s %s():' % (text, func.__name__)
return func(*args, **kw)
return wrapper
return decorator
@log('execute') #调用
def now():
print '2013-12-25'
5.8.偏函数
functools.partial: 把一个函数的某些参数设置默认值,返回一个新的函数
int2 = functools.partial(int, base=2)
6.模块
在文件夹中创建一个 __init__.py 文件,Python会把这个目录当成一个包
__init__.py可以是空文件,也可以有Python代码
6.1.任何模块代码的第一个字符串都被视为模块的文档注释;
if __name__=='__main__':
在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__,而如果在其他地方导入该hello模块时,if判断将失败
别名:
import cStringIO as StringIO:
优先导入cStringIO,如果不支持,可以降级使用StringIO
作用域:
类似__xxx__这样的变量是特殊变量,自己的变量一般不要用这种变量名;
_xxx和__xxx这样的函数或变量就是非公开的(private)不应该被直接引用,
可以通过 get()返回一个新的函数
__name变量改成了_Student__name
6.2.安装第三方模块
pip install PIL #使用 pip安装模块,pypi.python.org,
6.3.__future__:在旧的版本中试验新版本的一些特性。
7.面向对象编程
7.1.类和实例
class Student(object): #类名通常是大写开头的单词,
(object)表示该类是从哪个类继承下来的
如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
def __init__(self, name, score): #类中定义的函数只有一点不同,就是第一个参数永远是实例变量self
7.2.获取对象信息
type(): type(123)返回type类型<type 'int'>
isinstance(): isinstance(d, Dog)返回布尔,
isinstance('a', (str, unicode))是否是某些类型中的一种
dir():获得一个对象的所有属性和方法,返回一个包含字符串的list
dir('ABC')
hasattr(): hasattr(obj, 'x') obj中有属性'x'吗
setattr(): setattr(obj, 'y', 19) # 设置一个属性'y'
getattr(): getattr(obj, 'y') # 获取属性'y'