Python(特点:优雅、明确、简单)
一、简介:
1989年,Python是解释型语言,不能加密,直接发布源码,Python 是现在最受欢迎的动态 (当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法) 编程语言之一(还有 Perl、Ruby 等)。近些年非常流行用 Python 建站,比如流行的 Python Web 框架 Django。对于高并发、多线程的应用程序,Python 也不是一种理想的编程语言,这是因为 Python 有一个叫 GIL(全局解释器锁)的东西,这是一种防止解释器同时执行多条Python 字节码指令的机制。这并不是说 Python 不能执行真正多线程并行代码,只不过这些代码不能在单个 Python 进程中执行而已。
二、与数据分析相关的 Python 库
1、NumPy 是 Python 科学计算的基础包,它提供:
快速高效的多维数组对象 ndarray;
直接对数组执行数学运算及对数组执行元素级计算的函数;
线性代数运算、随机数生成;
将 C、C++、Fortran 代码集成到 Python 的工具等。
它专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA 用其处理一些本来使用 C++,Fortran 或Matlab 等所做的任务。
2、Pandas 主要提供快速便捷地处理结构化数据的大量数据结构和函数。
3、Matplotlib 是最流行的用于绘制数据图表的 Python 库。
4、IPython 是 Python 科学计算标准工具集的组成部分,是一个增强的 Python Shell,目的是提高编写、测试、调试 Python 代码的速度。主要用于交互式数据处理和利用matplotlib 对数据进行可视化处理。
5、SciPy 是一组专门解决科学计算中各种标准问题域的包的集合。主要包括以下包:
scipy.integrate: 数值积分例程和微分方程求解器;
scipy.linalg: 扩展了由 numpy.linalg 提供的线性代数例程和矩阵分解功能;
scipy.optimize: 函数优化器以及根查找算法;
scipy.signal: 信号处理工具;
scipy.sparse: 稀疏矩阵和稀疏线性系统求解器;
scipy.special: SPECFUN(这是一个实现了许多常用数学函数的 Fortran 库)的包装器。
scipy.stats: 标准连续和离散概率分布、各种统计检验方法和更好的描述统计法;
scipy.weave: 利用内联 C++ 代码加速数组计算的工具。
三、python适合开发的领域
1、web网站和各种网络服务
2、系统工具和脚本
3、作为”胶水“语言把其他语言开发的模块包装起来方便使用
四、python不适合开发的领域
1、硬件(首选C)
2、移动开发(IOS/Android)
3、游戏开发(C/C++)
五、python和其他语言对比
类型 运行速度 代码量
C 编译为机器码 非常快 非常多
Java 编译为字节码 快 多
Python 解释执行 慢 少
六、python优缺点
优点:代码量少
缺点:运行速度慢,源码不能加密
七、python中的数据类型
整数、浮点数、(如果我们要计算 11 / 4 的精确结果,按照“整数和浮点数混合运算的结果是浮点数”的法则,把两个数中的一个变成浮点数再运算就没问题了)
字符串(如果要表示多行字符串,可以用'''...''',在多行字符串前面添加 r ,把这个多行字符串也变成一个raw字符串)、
布尔值、空值(空值是Python里一个特殊的值,用None表示)
list、set、tuple(元组)、dict(字典)
八、创建(元组)tuple和创建list唯一不同之处是用( )替代了[ ]
1、按照索引访问list:L[1],倒序访问list:L[-1]
2、添加新元素:L.insert(2,'Paul')
3、从list删除元素:L.pop()
4、list替换元素:L[2] = 'Paul'
5、创建tuple(元组):t = ('Adam', 'Lisa', 'Bart')
6、创建单元素tuple:t = ('Adam',) 因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义
7、创建“可变”的tuple:t = ('a', 'b', ['A', 'B'])
九、dict(字典)和set
1、创建dict:d = {'Adam': 95, 'Lisa': 85,'Bart': 59}
2、访问dict:print d['Adam']
3、更新dict:d['Paul'] = 72
4、遍历dict:for key in d: print key + ':', d[key]
5、dict特点:
第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。(不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复)
第二个特点就是存储的key-value序对是没有顺序的!
第三个特点是作为 key 的元素必须不可变(Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key)
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
6、创建set:s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
7、访问set:'Bart' in s(判断Bart是否存在set中)
8、set特点:
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
set存储的元素也是没有顺序的。
9、更新set:s.add(4)
10、删除set:s.remove(4)
十、if语句、for循环、while循环
1、if a == 1: print 'hello, world'
2、for a in L: print 'hello, world'
3、while a == 1: print 'hello, world'
4、break:退出循环
5、continue:继续循环
十一、函数
1、在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
2、定义默认参数(函数的默认参数的作用是简化调用),由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面
def fn(a, b=1, c=2): pass
3、定义可变参数函数:def fn(*args): print args 可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数
十二、切片
1、切片规则:
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3
只用一个 : ,表示从头到尾
L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
2、倒序切片
3、字符串切片
十三、索引迭代
1、Python中,迭代永远是取出元素本身,而非元素的索引。
2、使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。(索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身)
3、zip()函数可以把两个 list 变成一个 list : zip([10, 20, 30], ['A', 'B', 'C']) ==》 [(10, 'A'), (20, 'B'), (30, 'C')]
4、迭代dict的value:for a in d.values(): print a
1、dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value
2、itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
5、迭代dict的key和value:d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } for key, value in d.items(): print key, ':', value
items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value,和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
十四、生成列表
1、print [x * (x + 1) for x in range(1,100,2) if isinstance(x, str)]
写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把list创建出来
列表生成式的 for 循环后面还可以加上 if 判断
if isinstance(x, str):加条件过滤