Python 简介
Python 由 Guido van Rossum(龟叔) 于 1989 年年底出于某种娱乐目的而开发。
Python 2 or 3
2008 年 12 月,Python 发布了 3.0 版本(也常常被称为 Python 3000,或简称 Py3k)。Python 3.0 是一次重大的升级,为了避免引入历史包袱, Python 3.0 没有考虑与 Python 2.x 的兼容 。这样导致很长时间以来,Python 2.x 的用户不愿意升级到 Python 3.0,这种割裂一度影响了 Python 的应用。毕竟大势不可抵挡,开发者逐渐发现 Python 3.x 更简洁、更方便。现在,绝大部分开发者已经从 Python2.x 转移到 Python 3.x,但有些早期的 Python 程序可能依然使用了 Python 2.x 语法。
2020年1月1日,Python2正式推出历史舞台。 宣布不在对Python2进行更新。
因此,不管是Python新手还是老手,新开发的Python程序都需要用Python 3进行开发。
Python 的特点
Python 是一种 面向对象 、 解释型 、 弱类型 的脚本语言,它也是一种功能强大而完善的通用型语言。
面向对象
解释型
弱类型
Python的设计哲学是 “优雅”、“明确”、“简单” ,如果之前你使用过其他的语言,再来使用Python,一
定会被它的简洁、优雅所震惊。相比其他编程语言(比如 Java),Python 代码非常简单,上手非常容
易。比如我们要完成某个功能,如果用 Java 需要 100 行代码,但用 Python 可能只需要 20 行代码,这是 Python 具有巨大吸引力的一大特点。
我们以 输出1-10之间的所有偶数 为例进行说明Python代码的简洁:
python代码
1
2 > res = [ i for i in rangge(1, 11) if i % 2 == 0]
>
Java代码
1
2
3
4
5
6 > for(int i=1; i<=10; i++){
> if (i%2 == 0) {
> System.out.println(i);
> }
> }
>
《Java编程思想》的作者Bruce Eckel这样评价Python:“ life is short you need python ”
Python 的两大特色是清晰的语法和可扩展性 :
- Python 的语法非常清晰,它甚至不是一种格式自由的语言。例如,它要求 if 语句的下一行必须向
右缩进,否则不能通过编译。Python 的可扩展性体现为它的模块,Python 具有脚本语言中最丰富和强大的类库(这些类库被形
象地称为“batteries included ,内置电池”),这些类库覆盖了文件 I/O、GUI、网络编程、数据库访问、文本操作等绝大部分应用场景此外,Python 的社区也很发达,即使一些小众的应用场景,Python 往往也有对应的开源模块来提供解决方案。
Python 作为一门解释型的语言,它天生具有跨平台的特征,只要为平台提供了相应的 Python 解释器,
Python 就可以在该平台上运行。解释型语言几乎天然是跨平台的
Python 自然也具有解释型语言的一些弱点 :
- 速度慢:Python 程序比 Java、C、C++ 等程序的运行效率都要慢。
- 源代码加密困难:不像编译型语言的源程序会被编译成目标程序,Python 直接运行源程序,因此
对源代码加密比较困难。
应用领域
在世界编程语言排行榜中, Python最近几年一直霸占到前三的地位,并且还有一直上升的趋势:
Python目前几乎在所有的应用领域都有所成就,可以编程语言界的 全栈语言 :
云计算 :云计算最火的语言, 典型应用OpenStack
大数据 :几乎所有的大数据组件都开发Python接口,如PySpark
Web开发 :众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, 知乎, 豆瓣等等, 典型
WEB框架有Django、Flask等。
科学计算 : 数据分析工具:NumPy, SciPy, Pandas, Matplotlib等
人工智能 : 深度学习:TensorFlow、PyTorch、PandlePandle
系统运维 :Python脚本,Ansible等
桌面界面开发 :PyQT, WxPython,TkInter
嵌入式开发 :MicroPython
网络爬虫 : 著名的爬虫框架Scrapy, BeautifulSoup, Requests等库
Python 安装
Python or Anconda?
Python官网:https://www.python.org
Anaconda官网:https://www.anaconda.com
Anaconda
Anaconda就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda
包含了conda、Python在内的超过180个科学包及其依赖项。
Anaconda具有如下特点:
开源
安装过程简单
高性能使用Python和R语言
免费的社区支持
其特点的实现主要基于Anaconda拥有的:
conda包
环境管理器
- 1,000+开源库
安装方式选择
离网环境 : 离网环境下使用Anaconda进行安装
联网环境 :
- Windows : 使用Anaconda进行安装
- Linux :使用python原生包进行安装
- Mac :使用Python原生包进行安装
Python 库安装
Python Package Index:https://pypi.org
联网安装
1、安装最新库
1 | pip install XXX |
2、安装执行版本库
1 | pip install xxx==version |
3、升级库到最新版本
1 | pip install —upgrade XXX |
4、卸载库
1 | pip uninstall XXX |
联网加速
由于 pip 默认使用 Python 的官方源 pypi.python.org/pypi ,导致我们经常使用pip装包时速度过慢
或者无法安装(请求超时)等问题,所以国内用户建议使用 pip 国内源。
目前常用的 pip 国内源有:
豆瓣:http://pypi.douban.com/simple(推荐)
清华:http://pypi.tuna.tsinghua.edu.cn/simple
Windows 配置
新建 %HOME%\pip\pip.ini 文件,内容如下:
1 | [global] |
Linux配置
创建 ~/.pip 目录 ,新建 ~/.pip/pip.conf 文件,内容如下:
1 | [global] |
离线安装
需要在 https://pypi.org 上查找自己需要的库进行安装。
whl包安装
注意:选对 Python版本
numpy-1.19.1-cp38-cp38-manylinux1_x86_64.whl
cp38代表python 3.8
x86_64代表64位操作系统
1 | pip install xxx.whl |
tar/zip 包安装
此方式适配所有 python 版本
1 | unzip numpy-1.19.1.zip |
Python 虚拟环境
Conda常用命令
1 | conda list # 查看安装了哪些包 |
创建虚拟环境
1 | conda create -n your_env_name python=x.x |
your_env_name: 虚拟环境的名字
x.x :python版本,如 3.6
激活虚拟环境
1 | conda activate your_env_name |
退出虚拟环境
1 | conda deactivate |
删除虚拟环境
1 | conda remove -n your_env_name --all # 删除所有 |
生成 requirements.txt
python 项目如何在另一个环境上重新构建项目所需要的运行环境依赖包?
生成 requirements.txt,有两种方式。
单虚拟环境
1 | pip freeze > requirements.txt |
为什么只适用于单虚拟环境?因为这种方式,会将环境中的依赖包全都加入,如果使用的全局环
境,则下载的所有包都会在里面,不管是不时当前项目依赖的。
使用 pipreqs
1 | # 安装 |
–force 强制执行,当 生成目录下的requirements.txt存在时覆盖。
这种方式,只生成当前项目下的依赖
Python基础语法
Boolean and its Opeations
1 | # Boolean and its Operations |
And Or
1 | # and or |
Expressions can evaluate to a boolean value
1 | # Expressions can evaluate to a boolean value |
Integer and floats
1 | # Integer and floats |
Numerical operations
1 | # Numerical operations |
String
- strings are useful because they are immutable(它们不可变)
1 | # String |
List
- Mutable(可变的)
- Iterable
- Sequence Type
1 | # List |
Method and Function
1 | # Method |
Tuple
- Similar to list 和list类似
- But it is immutable(hashable) 但它是不可变的 support for hash(), a built-in function
- Can have repeated value可以有重复的元素
- Sequence Type
1 | # Tuple |
Set
- Unordered 没有顺序
- Contain hashable elements( so it is again immutable) 里面的元素必须是hashable
- No repetition 没有重复
- Not a sequence type
1 | # Set |
Common operations on List, Set, Tuple
1 | # Use tuple for demonstration here |
Dictionary
- Very fast for look up( O(1) compared to O(N) in list) 非常快
- Mapping Type (think of “Map” as “Match”) #### Keys
- Arbitary values 任意值
- Must be hashable(i.e. Immutable, will explain later) 必须是不变的
- We may also call them “index”(pandas) 有时候也称为index #### Values
- No restrictions, can be mutable 没有限制
1 | # Dictionary |
Ranges
- Start 开始
- Stop 结束
- Step 步的大小
1 | # Ranges |
Hashable
- map name strings to 15 integers
- red = a collision
- think of them as many buckets
- theoretically more than one items in every single bucket, but we say the look up is O(1)
1 | # Hashable |
Loop and Conditionals
1 | # If Statement |
2-D List, List Aliasing, Shallow or Deep Copy
- Where we get most bugs
- You think you get a new list, but you are getting the same one in reality “牵一发动全身” “一改全改了”
- When you are copying a list
1 | A = [1,2] |
Python操作数据库
安装
1 | pip install mysqlclient |
导入依赖包
1 | import MySQLdb |
建立数据库连接
1 | conn= MySQLdb.connect( |
获取游标
1 | # 通过获取到的数据库连接conn下的cursor()方法来创建游标。 |
通过游标执行SQL
1 | # 创建数据表,通过游标cur 操作execute()方法可以写入纯sql语句。通过execute()方法中写入sql语句 |
关闭连接
1 | # cur.close() 关闭游标 |