内容主要来自中国大学MOOC-嵩天老师python程序设计基础课程
蔓延至今的开源运动
特点:开放的计算生态;野蛮生长,自然选择,相互依存,无顶层设计 | |
---|---|
1983年 | MIT的Richard stallman教授启动GNU项目 |
1989年 | GNU通用许可协议诞生,自由软件时代到来 |
1991年 | Linus torvalds发布Linux内核 |
1998年 | 网景浏览器开源,产生了Mozilla |
呃,这张图里,我能认出来Ruby Linux android MySQL php python,其他的比如火山样式的见过但是不知道是做什么的。。。
仍然不是很能理解开源软件的商业模式,什么叫卖服务呢?
数据类型
python中有很多数据类型,分为可变和不可变两种,比如字符串、元组和数字(浮点数、整数)是不可变数字类型,而列表、字典和集合则是可变数据类型。
不可变数据的优势:不管内存中有多少个引用,相同的对象只占用一块内存,大大增加了程序运行性能。
举个例子:
>>> a=(2,5)
>>> id(a)
2800379720200
>>> a=(1,2,4)
>>> id(a)
2800379729600
>>> a[1]=4
TypeError: 'tuple' object does not support item assignment
当我们创建一个不可变数据对象时,这个元组的内容的是不允许修改的。我们修改元组的内容时,程序内部新建了一个元组对象,并将变量名a指向了新的元组,此时a无法再引用到第一个元组对象了。假设我们强行想修改元组内的数据,如 a[1] = 4,会出现提示报错。也就是说想对数据进行修改,就得新建对象。
对于可变数据,新建两个内容完全一样的对象,其地址也是不一样的,也就是程序为这两个内容一样的对象开辟了两块内存空间。
集合数据类型
- 集合中不能含有变量
- 集合中的元素没有重复,可以利用这点去重
- 用大括号{}或set()函数创建,用逗号隔开不同元素
- 建立空集合必须使用
set()
序列数据类型
序列是指有序的一串数据,所以可以包含相同元素
衍生出:字符串类型 元组类型 列表类型
列表数据类型
创建后可以被随意修改的衍生序列类型,非常常用
用方括号[]或函数list()创建
元组数据类型
是一种序列类型,一旦创建就不能被修改
使用小括号()或函数tuple()函数创建,元素用逗号隔开
创建和使用时可以用小括号,也可以不用
元组与列表相同,也是容器对象,可以存储不同类型的内容。元组与列表有两个不同点。第一个不同点是元组的声明使用小括号,而列表使用方括号,当声明只有一个元素的元组时,需要在这个元素的后面添加英文逗号;第二个不同点是元组声明和赋值后,不能像列表一样添加、删除和修改元素,也就是说元组在程序运行过程中不能被修改。
用于列表的排序、替换、添加等方法也不适用于元组,适用于元组的主要运算有元组的合并、遍历、求元组的最大值和最小值等操作方法。
字典数据类型
映射是一种键(索引)和值(数据)的对应关系
字典类型是“映射"的体现
值对:键是数据索引的扩展
字典是值对的集合,键值对之间无序
采用大括号{}和dict()创建,键值对用冒号:表示,元素间用冒号分隔
字典变量={键1:值1,键2:值2….}
使用{}生成空字典类型,而不是空的集合类型,注意生成空集合用set()。可见字典类型的常用程度
期间老师稍稍讲了一点numpy和scipy,再加上matplotlib,这是python领域最常用的三个数据处理库,可以解决绝大多数的计算分析问题。关于数据的结构,不了解的还有很多
pip工具
pip就不用我多说了,神器
下边介绍一下pip的常用命令
Usage: pip command [options] | |
---|---|
install 安装 | Install packages. |
download 下载而不安装 | Download packages. |
uninstall 卸载 | Uninstall packages. |
freeze 将已安装库打包 | Output installed packages in requirements format. |
list 列出所有已安装库 | List installed packages. |
show 显示某个库的内容 | Show information about installed packages. |
check | Verify installed packages have compatible dependencies. |
search 从PyPI网站上以关键字搜索 | Search PyPI for packages. |
wheel | Build wheels from your requirements. |
help or pip -h 帮助 | Show help for commands. |
1 key update | pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U |
修改pip源,加快下载速度
国内源:
新版ubuntu要求使用https源,要注意。
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
临时使用:
可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider,这样就会从清华这边的镜像去安装pyspider库。
永久修改,一劳永逸:
Linux下,修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)
内容如下:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini。内容同上。
程序设计的方法论
自顶向下的设计思维:分而治之
将一个总问题划分为若干个小问题组成的形式,使用同样的办法进一步划分问题,直至小问题可以用计算机简单明了的解决
自底向上的执行思维:模块化集成
分单元测试,逐步组装;安好自顶向下相反的路径操作,直至系统各部分以组装的思路都经过测试和验证
自顶向下是“系统”思维的简化
计算思维:基于计算机强大的算力及海量数据;抽象计算过程,关注设计和构造,而非因果(实验思维)。以计算机程序设计为实现的主要手段,一旦能清楚地抽象出实现问题的方法,就能使用程序快速的求解
艺术:思想优先,编程其次
设计:想法和编程同等重要
工程:编程优先,思想次之