Anaconda
-
推荐使用。集成了数据分析、科学计算相关的几乎所有常用安装包;比如Numpy, Scipy, Matplotlib, sklearn等
-
镜像
# http://pypi.douban.com/simple/ 豆瓣 # http://mirrors.aliyun.com/pypi/simple/ 阿里 # http://pypi.hustunique.com/simple/ 华中理工大学 # http://pypi.sdutlinux.org/simple/ 山东理工大学 # http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学 # https://pypi.tuna.tsinghua.edu.cn/simple 清华 # 命令如下 pip install -i 镜像网站 包名 让linux系统信任的命令--trusted-host pip install -i http://pypi.douban.com/simple/ flask --trusted-host=pypi.douban.com -
包
pip install//安装 pip uninstall//卸载 pip freeze > require.txt//将所有安装的包以及版本号输出到require.txt中 -
典型的模块文件样式
#!/usr/bin/python # encoding: utf-8 | #-*-coding:utf8-*- | #coding:utf8 # 三种方式选一种即可
变量和数据类型
- python语言是弱类型,使用之前不需要声明类型
- 定义 变量名 = 值
- 变量名字区分大小写
- 命名规则,以字母或下划线开头,可以同时定义多个变量并赋值
数字类型
- 整型、长整型
- 浮点
- 复数
布尔类型
- true、false
- 空的列表、None的布尔值都是false
- 字符串
- None
运算符
数字运算符
- +、-、*、/
- 除法取余 :%
- 除法取整 ://
- 乘方:** (如果是3次方 **3)
- 不支持:++/--
- 支持:+=/-=
- 比较操作符:>、<、>=、<=、!=、==
逻辑运算符
- and
- or
- not
- 不支持 ||、&&
代码块和缩进
- Python用缩进表示代码块,等价其他语言的大括号
- 缩进是强制检查,整个代码缩进必须一致,否则无法运行
- 用4个空格或者Tab进行缩进
- IDE自动保证缩进的一致
内置数据结构
- 列表
- 元组
- 字典
- 集合
列表的使用
- 列表能够保存不同数据类型的元素,因为他存储的是指向元素的指针
- 用[]或list()声明一个列表变量
- 用下标访问元素
- 下标从0开始
- 列表长度可以动态扩展
- 下标从0开始,可以是负数
- 切片操作 [begin:end:step]
- 切片是左闭右开的半开区间,不包含右边界
元祖
- 类似于列表
- 元组内容不能修改
- 长度不能动态修改
- 用()定义一个元组
字典
- 键值对集合(key->value)
- 定义方式:{key1:value,key2:value}
- 用[key]访问元素
- 可以用 key in dict方式判断字典中是否有key
- key必须是不可变的对象(hash),对value没有要求
集合
- 用set()创建集合对象
- 集合中的元素不重复
- 支持数学集合操作
- 集合是无序的
- 集合里的元素是不可变的(能够hash的)
- 不支持索引和切片操作
集合运算
- s|t :并集
- s&t :交集
- s-t:差集
- s^t:对称差集
- s|=t :把t的元素并入s
- s<t:s是否为t的子集
- s>t:s是否为t的超集
- s.isdisjoint(t):s和t是否有交集
语法结构
- 顺序执行
- 条件执行
- 循环执行
条件语句
- if
- if…else
- if…elif…else
- 没有switch、case语法
- 空的列表、元组、字符串都被评估为False
- None被评估为False
循环语句
- while 当条件表达式为False时停止循环
- for 遍历一个序列中所有的元素;for item in collection
break和continue
- break:跳出整个循环
- continue:停止本次迭代,继续下一轮迭代
- 正常退出循环:continue
- 非正常退出循环:break
- while和for都支持一个else分支,正常终止的循环,会执行else 分支中的代码
遍历列表中的每个元素
result = []
for value in collection:
if condition:
result.append(expression)
解析推导式
列表解析式
- 根据一个列表生成一个新的列表
- 列表解析比for循环遍历好,代码紧凑
- [expr for iter in iterable [if condition]]
例子
- 一个字符串列表,要求过滤掉长度小于3的字符串,并将剩下的 转换成大写样式
names = ['bak','Tom','alice','Jerry','wendy','Smith']
s = [name.upper() for name in names if len(name) > 3]
print(s)
生成器表达式
- (expr for iter in iterable [if condition ] )
- 生成器是迭代的生成结果,而不是立刻对表达式求值
- 得到的是个生成器对象,而不是列表
- 不能用索引、append等列表操作
- 可以用list()工厂函数转换为列表对象
- 不占用内存空间
函数
- 关键字:def
- 参数 分为 位置参数 和 关键字参数,我们可以将参数列表(p1,p2)里面的p1和p2在调用的时候指定,p1=33,p2=43
- 函数体
- 返回值
- 第二种方式:lambda表达式
函数类型
- 参数没有类型,Python不做类型检查
- 没有重载,Python不会区分参数名字和个数
- 多个同名函数时,后一个会覆盖前一个
- 位置参数和关键字参数(函数调用时)
- 参数传递的是“引用”,函数内部的修改会影响外部
函数参数
- 任意数量的参数:* 、**
- def fun(*args,**kwargs)
- *args用于收集位置参数,形成一个列表
- *kwargs用于收集位置参数,形成一个字典
函数的返回值
- 函数可以有多个返回值
- 可以用一个对象接收返回值
- 也可以用多个变量接收
迭代器
- 可迭代对象 :Iterable
- 如果一个对象可以用 for … in …的方式遍历其内容,这个对 象就是一个可迭代对象。
- yield语法,不使用return,使用yield就变成了迭代函数
def myopen(filenmae):
f = open (filenmae)
for line in f:
result = line
yield result
f.close()
logs = myopen('hello.py')
for line in logs:
print(line)
函数式编程
- 函数是一类对象
- 函数可以有属性
- 文档属性:定义函数的第一个没有赋值的字符串,可以通过 __doc__访问
- lambda表达式
OOP
- 面向过程、面向对象、面向函数三种编程范式
- 面向过程:C
- 面向对象:C++、Java、Python
- 面向函数:Scala、Clojure、Python
- 面向对象的思想,就是用类和对象对现实世界进行抽象
- 类:是对事物的抽象,比如狗、羊
- 对象:是类的一个实例,比如旺财、喜羊羊
- 用class关键字定义类
- 类有变量和函数组成
- 变量:又称为属性、成员属性,是对数据的封装
- 函数:又称为方法、成员方法,是对行为的封装
- 方法:self做第一个参数,被绑定到对象本身,self指向对象本身的指针
- 也分为公有方法和私有方法,私有方法也是以__开头
- 特殊方法: __init__、__str__、__cmp__等等
继承和重用
注意事项
- range:占据内存
- xrange:不占内存
- 使用from xxx文件 import xxx函数
- xxx文件添加if __name__ == '__main__'则引用他的包,不会输出被引用的主函数的内容
- with替代使用open,最后不需要使用f.close函数关闭文件,避免了异常处理
with open('xxx.txt') as f:
for line in f:
pass