1.Python介绍
1.1 Python的发展
1989年圣诞节期间,为了打发无聊的时间,荷兰人Guido van Rossum(数学、计算机双硕士,2005年
加入Google,2013年加入DropBox),决心开发一种新的解释性脚本语言。
1991年初发布了第一个公开发行版。由于他是英国BBC喜剧《Monty Python’s Flying Circus》的忠实粉
丝,因此为这门语言取名Python。
Python目前已经成为很多大学的编程课语言。甚至在国内一些考试已经引入了Python。科学计算方面、
运维领域Python几乎已经成为最主要的编程语言,拥有非常方便快捷开发的库。
Python的哲学,可以使用import this 查看Python之禅。
1.2 Python的版本
目前企业中使用的主要版本还是2.x和3.x。
:::warning
2.x最后一个版本是2.7,很多企业为了兼容老项目依然在维护。从2020年开始,不在支持Python2,官方还提供了一个倒计时网站https://pythonclock.org/。
3.x还在不断的扩充发展,当前主流版本是3.8+。
:::
- 2015年9月发布3.5
- 2016年12月发布3.6
- 2018年6月发布3.7
- 2019年10月发布3.8
- 2020年10月发布3.9
Python2和3的区别
- 语句函数化,例如print(1,2)打印出1 2,但是2.x中意思是print语句打印元组,3.x中意思是函数的2个参数
- 整除,例如1/2和1//2,3.x版本中/为自然除
- 3.x中raw_input重命名为input,不再使用raw_input
- round函数,在3.x中i.5的取整变为距离最近的偶数
- 3.x字符串统一使用Unicode
- 异常的捕获、抛出的语法改变
2015年后,各主要国内外大公司都已经迁移到了Python3。很多重要的Python第三方库也陆续停止了对Python2的支持,所以,Python 3已经是必须学习的版本。2018年Python3的使用比例已经超过了
85%。
在公司内,往往老项目维护维持2.x版本暂不升级,新项目使用3.x开发。
开发时,假如使用3.5.8,部署时应尽量保持一致,不要随意升级版本,更不要降低版本。
不要迷信版本,学会一个版本,好好学会一门语言,其他都不是问题。当然,也不要迷信语言。
在最合适的领域使用最合适的语言。
截止2022年3月,3.9、3.10版本依然为不稳定版本。
2.环境安装
:::warning 官方网站下载不同平台。https://www.python.org/downloads/ :::
2.1 Linux环境安装
如果是Ubuntu等桌面系统,都已经更新到了Python较新的版本。但多数生产环境使用的还是红帽系
统。
CentOS7默认还是Python2.7,而开发环境如果是高版本Python就带来了问题。为了不破坏当前系统使
用,甚至以后为了多个Python项目部署(这些项目使用不同Python解释器版本),建议使用多版本工
具。
也可以考虑容器部署Python应用程序。
多版本安装
以CentOS8为例
# yum install python36 python38
可以通过配置选择当前Python版本
# alternatives --config python3
查看当前版本
# python3
# python3 -V
虚拟环境
安装虚拟环境
# pip3 install virtualenv
新建一个普通用户
# useradd python
# echo python | passwd --stdin python
# su - python
创建工程目录,并设置虚拟环境
$ mkdir -p projects/cmdb
$ mkdir venvs
$ cd venvs
$ virtualenv vcmdb
$ ls
vcmdb
$ cd ~/projects/cmdb/
$ pwd
/home/python/projects/cmdb
(vcmdb) 表示虚拟环境
$ source ~/venvs/vcmdb/bin/activate
(vcmdb) [python@localhost cmdb]$ python -V
Python 3.8.0
(vcmdb) [python@localhost cmdb]$ deactivate
$ python -V
-bash: python: command not found
$ python3 -V
Python 3.8.0
基于3.6的虚拟环境,使用-p 指定3.6版本python解释器
$ virtualenv -p /usr/bin/python3.6 vcmdb36
$ cd ~/projects/cmdb/
$ source ~/venvs/vcmdb36/bin/activate
(vcmdb36) [python@localhost cmdb]$ python -V
Python 3.6.8
(vcmdb36) [python@localhost cmdb]$ which python3
~/venvs/vcmdb36/bin/python3
(vcmdb36) [python@localhost cmdb]$ which python
~/venvs/vcmdb36/bin/python
(vcmdb36) [python@localhost cmdb]$ deactivate
[python@localhost cmdb]$ python3 -V
Python 3.8.0
2.2 Windws环境安装
下载Windows x86-64 executable installer ,按照提示安装即可。
勾选增加PATH路径,简单安装直接点击”Install Now”。
打开Windows命令行
$ python -V
Python 3.7.4
$ pip -V
pip 19.0.3 (python 3.7)
pip是Python包管理器,以后安装Python第三方包都需要它,它从3.x开始就集成在Python安装包里面了。
2.3 pyenv多版本管理
官网 https://github.com/pyenv/pyenv
快捷安装 https://github.com/pyenv/pyenv#the-automatic-installer
# yum install git curl
python编译依赖如下
# yum install gcc make patch gdbm-devel openssl-devel
# yum sqlite-devel readline-devel zlib-devel bzip2-devel
创建普通用户
# useradd python
# su - python
在python用户下安装
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenvinstaller
| bash
由于某些原因,浏览器可以访问,大家自行下载保存为shell脚本执行
https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenvinstaller
或者使用项目源码文件
https://github.com/pyenv/pyenv-installer/blob/master/bin/pyenv-installer
以后更新pyenv使用
$ pyenv update
安装完,按照提示处理,把下面的脚本放到当前用户的.bashrc文件末尾
# the following to ~/.bashrc:
export PATH="/home/python/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
缓存文件
由于连接国外网站速度太慢,可以先下载好将要安装的Python版本的安装包,直接放置在~/.pyenv/cache目录下,再进行安装。此cache目录不存在,请自行创建。
安装python多版本
$ pyenv install -l
$ pyenv install 3.6.9 -vvv
$ pyenv install 3.7.7 -vvv
$ pyenv version 当前python版本,system表示当前操作系统使用的版本
$ pyenv versions 查看所有已经安装版本,*星号表示当前版本
pyenv是源代码编译安装Python解释器,所以一定要安装gcc等依赖。
创建虚拟环境
由于不同项目,或使用不同Python版本,或使用同版本Python但使用不同版本库,很难将它们部署在一起,所以,应该使用不同的虚拟环境隔离部署。
使用pyenv local 命令建立一个目录和一个Python版本或虚拟版本之间的关系,该目录的子孙目录默认也继承这个版本。
$ mkdir -p projects/test369
$ cd projects/test369/
[python@nodex test369]$ pyenv virtualenv 3.6.9 py369
[python@nodex test369]$ pyenv local py369
(py369) [python@nodex test369]$ python -V
Python 3.6.9
(py369) [python@nodex test369]$ pyenv version
py369 (set by /home/python/projects/test369/.python-version)
3.pip通用配置
windows配置文件: ~/pip/pip.ini 。windows家目录,在“运行”中键入.
Linux配置文件: ~/.pip/pip.conf
内容,可参照 http://mirrors.aliyun.com的pypi帮助
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
pip install pkgname 命令,是安装python包的命令
4.扩展安装ipython & Jupyter
4.1 安装ipython
ipython是增强的交互式Python命令行工具
$ pip list
$ pip install ipython
$ ipython
4.2 安装Jupyter
是基于WEB的交互式笔记本,其中可以非常方便的使用Python。
安装Jupyter,也会依赖安装ipython的
$ pip install jupyter
$ jupyter notebook help
$ jupyter notebook --ip=0.0.0.0 --no-browser
$ ss -tanl
常用快捷键
- a之前插入代码块、b之后插入代码块
- L 增加行号
- 运行代码块 shift + enter,选择下面的代码块
- 运行当前代码块 ctrl + enter
5.Pycharm安装
Windows用户,官网下载Pycharm社区版,足够开发项目使用了。按照软件安装向导提示安装即可。
Ubuntu可在应用市场安装社区版。
6.查阅帮助
- 在线帮助,html
- 下载并打开官方文档,chm
✨.第一手好的资料应该是帮助文档
✨.https://www.python.org/downloads/windows/
IPython中
- 使用help(keyword),keyword可以是变量、对象、类、函数等
- keyword?
- keyword??
7.计算机基础知识
艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。 图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础。 图灵机已经有输入、输出和内部状态变化机制了。 图灵奖是目前世界上计算机领域最高奖项。2000年姚期智是第一个获得此奖的华人。
冯·诺依曼著名匈牙利裔美籍犹太人数学家、计算机科学家、物理学家和化学家 ,数字计算机之父。他提出了以二进制作为数字计算机的数制基础,计算机应该按照程序顺序执行,计算机应该有五大部件组成。
冯诺依曼体系
五大核心部件
- 中央处理器CPU
- 运算器:用于完成各种算术运算、逻辑运算和数据传送等数据加工处理。
- 控制器:用于控制程序的执行,是计算机的大脑。运算器和控制器组成计算机的中央处理器(CPU)。控制器根据存放在存储器中的指令序列(程序)进行工作,并由一个程序计数器控
- 制指令的执行。控制器具有判断能力,能根据计算结果选择不同的工作流程。
- 存储器:用于记忆程序和数据,例如:内存。程序和数据以二进制代码形式不加区别地存放在存储器中,存放位置由地址确定。内存是掉电易失的设备。
- 输入设备:用于将数据或程序输入到计算机中,例如:鼠标、键盘。
- 输出设备:将数据或程序的处理结果展示给用户,例如:显示器、打印机。
CPU中还有寄存器和多级缓存Cache。
- CPU并不直接从速度很慢的IO设备上直接读取数据,CPU可以从较慢的内存中读取数据到CPU的寄存器上运算
- CPU计算的结果也会写入到内存,而不是写入到IO设备上
8.计算机语言
语言是人与人沟通的表达方式。
计算机语言是人与计算机之间沟通交互的方式。
🐱🏍机器语言
- 一定位数的二进制的0和1组成的序列,也称为机器指令
- 机器指令的集合就是机器语言
- 与自然语言差异太大,难学、难懂、难写、难记、难查错
🐱🏍汇编语言
- 用一些助记符号替代机器指令,称为汇编语言。ADD A,B 指的是将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中
- 汇编语言写好的程序需要汇编程序转换成机器指令
- 汇编语言只是稍微好记了些,可以认为就是机器指令对应的助记符。只是符号本身接近自然语言
🐱🏍低级语言
- 机器语言、汇编语言都是面向机器的语言,都是低级语言
- 不同机器是不能通用的,不同的机器需要不同的机器指令或者汇编程序
🐱🏍高级语言
- 接近自然语言和数学语言的计算机语言
- 高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序
- 1954年正式发布的Fortran语言是最早的高级语言,本意是公式翻译
- 人们只需要关心怎么书写源程序,针对不同机器的编译的事交给编译器关心处理
- 语言越高级,越接近人类的自然语言和数学语言
- 语言越低级,越能让机器理解
- 高级语言和低级语言之间需要一个转换的工具:编译器、解释器
✨编译语言
- 把源代码转换成目标机器的CPU指令
- C、C++等语言的源代码需要本地编译
✨解释语言
- 解释后转换成字节码,运行在虚拟机上,解释器执行中间代码
- Java、Python、C#的源代码需要被解释器编译成中间代码(Bytecode),在虚拟机上运行
😎高级语言的发展
- 非结构化语言
- 编号或标签、GOTO,子程序可以有多个入口和出口
- 有分支、循环
- 结构化语言
- 任何基本结构只允许是唯一入口和唯一出口
- 顺序、分支、循环,废弃GOTO
- 面向对象语言
- 更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承
- 封装、继承、多态
- 函数式语言
- 古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中
- 函数是“一等公民”,高阶函数
程序Program
- 算法 + 数据结构 = 程序
- 数据是一切程序的核心
- 数据结构是数据在计算机中的类型和组织方式
- 算法是处理数据的方式,算法有优劣之分
只有选对了合理的数据结构,并采用合适的操作该数据结构的算法,才能写出高性能的程序。
😂写程序的难点
- 理不清数据
- 搞不清处理方法
- 无法把数据设计转换成数据结构,无法把处理方法转换成算法
- 无法用设计范式来进行程序设计