python学习之路:
编程:逻辑,背后原理(网络、代理);
java、c、c++、python、c#、php、vb/.NET、js、go、perl、swift、ruby、R;
每个知识都是有用的,只是你位置不够高,当你到达一定位置时才发现书读少了;
荷兰人guido van rossum(他是英国BBC喜剧《monty python's flying circus》的忠实粉丝),1989年创立了python,1991年初发布第一个公开发行版,2013年加入dropbox;
python来源于
全世界程序员为python提供了11万多的库;
life is short,you need python;
python哲学:import this;
技能:
平台:*nix;
系统:线程、进程、shell编程;
网络:网络原理、http、socket开发、异步IO;
web开发:偏后端、MVC框架、django、flask、tornado;
算法要求:转置矩阵、求质数等现场能写;
DB:关系型至少会mysql、nosql最好会一个;
可视化:html、js,browser痛点在于兼容性(user-agent);
linux运维工程师:知识体系庞大、集群、虚拟化、web应用、大数据、云计算等核心技术;
python开发工程师:最易入门的开发语言,应用非常广泛;
基础:OS、网络基础、DB基础、python语言基础……
进阶:函数封装思想、面向对象设计、装饰器、描述器……
高级:网络编程、并发编程、ORM、最新前端架构开发(ES6、react)……
实战:web框架、博客系统、CMDB、跳板机;
运维工作:
职业方向:
运维自动化工程师:需求多样,问题复杂;
全栈工程师:偏向web开发,web前后端开发;
大数据开发工程师:部分可使用python语言完成,注重算法应用;
分析工程师(数据科学家):科学计算、数据建模、注重算法的设计;
AI:facebook算法框架pytorch;
python该怎么学?
多写,写好的代码就是要不停的练习,唯手熟尔;
少问,对问题的解决能力,决定着你水平的高低;
不要盲目下手,先构思;
不管黑猫白猫,抓住老鼠就是好猫;
先不要苛求完美,先做出效果来;
忘了就去查手册;
少看博客(仅作为参考),多总结、多实践;
慎用删除;
再简单的代码,放在生产前,必须测试;
适当的注释,例如:功能说明,负责的逻辑的实现说明;
通一门,则无所谓语言了,核心是程序逻辑;
代码重构、优化——简化复杂的语句,复用——函数;
学不学框架?架构;
学习不是囤积?
知识不是用来囤积的;
你需要的不是漂亮的书架;
你需要的不是海量的磁盘;
你需要的是夜以继日的码代码,成为骄傲的码农;
#,octothorpe八角帽,pound英镑,hash电话的#键,mesh网;
+,plus;
-,minus,subtract;
/,slash,divide;
\,back slash,escape sequences转义序列;
\\,double back slash;
*,asterisk星号,multiply乘;
%,percent;
<,less than;
>,greater than;
<=,less than equal;
>=,greater than equal;
_,underscore;
=,equal,single equal;
==,double equal;
format string;
(),parenthesis;
,,comma;
''',triple quotes;
',quote;
'',double quote;
area面积;
girth周长;
radius半径;
注:
一行不要超过80个字符,python风格;
round(),四舍六入五取偶;
%r和%s区别,%r用作debug(程序员用),%s用作显示(用户用);
input()和raw_input(),input()会把输入的内容当python代码处理,会带来安全问题;
注:
print end1+...+end10,end11+...end20
与
print end1+...+end10,
print end11+...end20
]# pydoc raw_input
argv,argument variable参数变量(标准的编程术语);
modules <==> libraries
from sys import argv
script,first,second,third = argv #参数解包
def print_two(*args):
arg1,arg2 = args
print('arg1:%r,arg2:%r' % (arg1,arg2)) #参数解包
print_two('zed','shaw')
def print_two_again(arg1,arg2):
print('arg1:%r,arg2:%r' % (arg1,arg2))
print_two_again('zed','shaw')
import collections
collections.OrderedDict(dic) #字典排序
file.open()
file.close()
file.read()
file.readline()
file.readlines()
file.truncate() #清空文件
file.write()
版本:
2.*发展到了2.7;
3.*发展到了3.6,3.*始自2008年,3.5版本发布于2015年,3.5与3.6差异大;
https://pythonclock.org/ #2.*版本的倒计时
不要迷信版本(重点是算法,解决问题的思路),学会一个版本,好好学会一门语言,其它都不是问题;
2.*与3.*区别:
语句函数化,如print(1,2)打印出1 2,2.*中是print语句打印元组,3.*中是函数的2个参数;
整除,如1/2和1//2,3.*中/为自然除结果为0.5,3.*中1//2为整除结果为0,2.*中/为整除结果为0;
3.*中raw_input重命名为input,不再使用raw_input;
round函数,如round(5.5)和round(5.4),3.*中i.5的取整变为距离最近的整数,3.*中round(5.5)结果为6,2.*中round(5.5)结果为6.0;
3.*中字符串统一使用unicode;
异常的捕获,抛出的语法改变;
3.*以上版本不用关心编码问题,如# -*- code: utf-8 -*-;
注:
SSD,电子电路;
普通disk,机械部件;
开发环境pyenv:
python多版本管理工具:
管理python解释器;
管理python版本;
管理python的虚拟环境;
注:
win下安装Python-3.5.3.tgz,第一步要选Add Python3.5 to PATH;
常用的源:清华(中科大),aliyun;
环境变量:win下先当前路径再环境变量PATH路径,linux下直接PATH路径不找当前路径;
vmware中的snapshot,有父子节点时,不要删除父节点,否则在子节点下再创建快照时会有问题(当前分支下的所有快照树可能会有问题);
安装vmware tools,虚拟机设置-->共享文件夹-->问题启用-->网络中找到主机-->映射驱动器到Z;
win下没有ss命令,可用netstat -tnlp;
https://github.com/pyenv/pyenv
https://github.com/pyenv/pyenv-virtualenv #使用此插件做包隔离
环境准备:
snapshot1(clear system):centos6.5,系统最小化安装,开启sshd,关闭iptables,配置yum源本地光盘,安装vim;
snapshot2(base):关闭selinux,配置ntpd,网络接口配置,密码(单用户模式下加S);
snapshot3(shutdown):关机,从此位置clone;
]# yum -y install git gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel nss
]# useradd python
]# echo "python" | passwd --stdin python
]# su - python
]$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash #自动安装,若报curl: (35) SSL connect error错误,先执行yum -y install nss;安装完成后,注意最后提示内容
]$ vim ~/.bash_profile
#export PATH
#export PYENV_ROOT=/home/python/.pyenv
export PATH="/home/python/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
]$ . !$
. ~/.bash_profile
]$ python -V
Python 2.6.6
]$ pyenv version #当前版本,同python -V
system (set by /home/python/.pyenv/version)
]$ pyenv versions #pyenv管理的所有版本
* system (set by /home/python/.pyenv/version)
]$ pyenv install -l #--list,列出可安装的版本
]$ pyenv install 3.5.3 -v #先下载再编译安装
]$ mkdir ~/.pyenv/cache #在此路径下放入Python-3.5.3.tar.xz、Python-3.5.3.tgz、Python-3.5.3.tar.gz,用本地提供的文件装,可省去在网上下载
]$ pyenv versions
* system (set by /home/python/.pyenv/version)
3.5.3
]$ pyenv -h
local Set or show the local application-specific Python version #local用于指定公共环境
global Set or show the global Python version #global全局,通常禁用此项
shell Set or show the shell-specific Python version #shell会话级别
install Install a Python version using python-build
]$ pyenv global 3.5.3 #禁用
]$ pyenv versions
system
* 3.5.3 (set by /home/python/.pyenv/version)
]$ pyenv global system
]$ pyenv versions
* system (set by /home/python/.pyenv/version)
3.5.3
]$ pyenv shell 3.5.3
]$ pyenv versions
system
* 3.5.3 (set by PYENV_VERSION environment variable)
]$ pyenv shell system
]$ pyenv versions
* system (set by PYENV_VERSION environment variable)
3.5.3
]$ mkdir -pv magedu/projects/
mkdir: created directory `magedu'
mkdir: created directory `magedu/projects/'
]$ cd !$
cd magedu/projects/
projects]$ pyenv local 3.5.3 #当前目录及其下的子目录是用local指定的,其它目录不受影响,local用于指定公共环境;
projects]$ python -V
Python 3.5.3
projects]$ pyenv version
3.5.3 (set by /home/python/magedu/projects/.python-version)
projects]$ cd ..
magedu]$ python -V
Python 2.6.6
magedu]$ pyenv version
system (set by /home/python/.pyenv/version)
magedu]$ cd projects/
projects]$ mkdir test
[python@tmsapp projects]$ cd test/
[python@tmsapp test]$ python -V
Python 3.5.3
[python@tmsapp test]$ pyenv version
3.5.3 (set by /home/python/magedu/projects/.python-version)
]$ ll -h ~/.pyenv/plugins/pyenv-virtualenv/ #此插件作包隔离
]$ pyenv install 3.6.1 -v
]$ cd ~/magedu/projects/
]$ pyenv local system
]$ pyenv version
system (set by /home/python/magedu/projects/.python-version)
]$ mkdir cmdb
]$ cd cmdb
]$ pyenv versions
* system (set by /home/python/magedu/projects/.python-version)
3.5.3
3.6.1
]$ pyenv virtualenv 3.5.3 magedu353 #magedu353为softlink,多出3.5.3/envs/magedu353和magedu353,如果与多人协同开发要用虚拟环境,且最好用虚拟环境,即此步创建的pyenv virtualenv 3.5.3 magedu353,若一个人使用可直接pyenv local VERSION公共环境;
Requirement already satisfied: setuptools in /home/python/.pyenv/versions/3.5.3/envs/magedu353/lib/python3.5/site-packages
Requirement already satisfied: pip in /home/python/.pyenv/versions/3.5.3/envs/magedu353/lib/python3.5/site-packages
[python@tmsapp cmdb]$ pyenv versions
* system (set by /home/python/magedu/projects/.python-version)
3.5.3
3.5.3/envs/magedu353
3.6.1
magedu353
]$ pyenv local magedu353 #此步操作后命令提示符会改变,之后每次进入~/magedu/projects/cmdb这个目录后命令提示符都会变;
(magedu353) [python@tmsapp cmdb]$ pyenv version
magedu353 (set by /home/python/magedu/projects/cmdb/.python-version)
(magedu353) [python@tmsapp cmdb]$ pip -V
pip 9.0.1 from /home/python/.pyenv/versions/3.5.3/envs/magedu353/lib/python3.5/site-packages (python 3.5)
(magedu353) [python@tmsapp cmdb]$ cd ..
]$ mkdir web
]$ cd web/
]$ pyenv local 3.6.1
]$ pip -V #该版本的公共环境,若多人协同开发时会混,此方式不建议使用;
pip 9.0.1 from /home/python/.pyenv/versions/3.6.1/lib/python3.6/site-packages (python 3.6)
]$ cd
~]$ mkdir ~/.pip
~]$ vim .pip/pip.conf #pip默认使用官网下载包,改为国内镜像
index-url=https://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com
~]$ cd magedu/projects/cmdb/
(magedu353) [python@tmsapp cmdb]$ pip install ipython redis jupyter
(magedu353) [python@tmsapp cmdb]$ pip list
(magedu353) [python@tmsapp cmdb]$ pip freeze > /tmp/packages.txt #或pip freeze -r /tmp/packages.txt,(freeze,Output installed packages in requirements format.获取当前环境的包),可通过pip install -r /tmp/packages.txt在其它目录或环境中重新安装(-r,--requirement,Install from the given requirements file. This option can be used multiple times.)
(magedu353) [python@tmsapp cmdb]$ cat !$
cat /tmp/packages.txt
bleach==2.1.2
decorator==4.2.1
entrypoints==0.2.3
html5lib==1.0.1
ipykernel==4.8.2
ipython==6.2.1
ipython-genutils==0.2.0
ipywidgets==7.1.2
jedi==0.11.1
Jinja2==2.10
jsonschema==2.6.0
jupyter==1.0.0
jupyter-client==5.2.2
jupyter-console==5.2.0
jupyter-core==4.4.0
MarkupSafe==1.0
mistune==0.8.3
nbconvert==5.3.1
nbformat==4.4.0
notebook==5.4.0
pandocfilters==1.4.2
parso==0.1.1
pexpect==4.4.0
pickleshare==0.7.4
prompt-toolkit==1.0.15
ptyprocess==0.5.2
Pygments==2.2.0
python-dateutil==2.6.1
pyzmq==17.0.0
qtconsole==4.3.1
redis==2.10.6
Send2Trash==1.5.0
simplegeneric==0.8.1
six==1.11.0
terminado==0.8.1
testpath==0.3.1
tornado==4.5.3
traitlets==4.3.2
wcwidth==0.1.7
webencodings==0.5.1
widgetsnbextension==3.1.4
(magedu353) [python@tmsapp cmdb]$ cd ../web/
[python@tmsapp web]$ pip install -r /tmp/packages.txt #导入安装
~]$ ll -h .pyenv/versions/3.5.3/envs/magedu353/lib/python3.5/site-packages/ #虚拟环境,要使用此种方式
~]$ ll -h .pyenv/versions/3.6.1/lib/python3.6/site-packages/
~]$ ll -h .pyenv/versions/3.5.3/lib/python3.5/site-packages/
]$ pyenv update #升级pyenv版本
pip saarch KEYWORD
pip help install #或pip install -h
-r, --requirement <file> Install from the given requirements file. This option can be used
multiple times.
ipython:
增强的python shell,自动补全、自动缩进、支持shell、增加了很多函数;
jupyter:
从ipython中独立出来,独立的交互式笔记本,后台使用ipython,快捷键有:shift+enter、ctrl+enter、dd、m(markdown编辑,要先在行首单击,再m);
(magedu353) [python@tmsapp cmdb]$ jupyter notebook password
(magedu353) [python@tmsapp cmdb]$ jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser
win中,http://localhost:8888/,登录时忘记密码:
>jupyter notebook --generate-config #会在家目录的.jupyter下生成 C:\Users\Administrator\.jupyter\jupyter_notebook_config.py,修改此文件的第280行c.NotebookApp.token = 'generated'
IDE工具:
https://www.jetbrains.com/pycharm/ #建立项目、编写代码、运行
右键某一模块(.py文件)-->Show in Open Folder
编程基础:
程序:一组能让计算机识别和执行的指令;
电子计算机:能够执行程序的机器;
现代计算机:
alan mathison turing艾伦麦席森图灵,1912.6.23-1954.6.7,英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父,图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础;
john von neumann冯诺依曼,1903.-1957,著名匈牙利裔美籍犹太人,数学家、计算机科学家、物理学家、化学家、数字计算机之父,他提出了以binary作为数字计算机的数制基础,计算机应该按照程序顺序执行,计算机应该有五大部件;
冯诺依曼体系架构:
cpu:运算器+控制器,运算器完成各种算数运算、逻辑运算、数据传输等数据加工处理,控制器控制程序的执行;
存储器:用于记忆程序和数据,如内存;
输入设备:将数据或程序输入到计算机中,如keyboard、mouse;
输出设备:将数据或程序的处理结果展示给用户,如显示器、printer等;
计算机语言;
机器语言;
汇编语言;
语言分类:
低级语言:面向机器的语言,包括机器语言、汇编语言;不同的机器不能通用,不同的机器需要不同的机器指令或汇编程序;
高级语言:
接近自然语言和数学语言的计算机语言;
高级语言首先要书写源程序,通过编译程序把源程序转换成机器指令的程序;
1954年正式发布的fortran(IBM)语言是最早的高级语言,本意是公式翻译;
人们只要关心怎么写源程序,针对不同机器编译的事交给编译器关心处理;
语言越高级,越接近人类的自然语言和数学语言;
语言越低级,越能让机器理解;
高级语言和低级语言之间需要一个转换的工具:编译器、解释器;
c、c++等语言的源代码需要本地编译;
java、python、c#的源代码需要被解释器编译成中间代码bytecode,在虚拟机pvm(同jvm)上运行;
编译语言,把源代码转换成目标机器的cpu指令;
解释语言,解释后转换成字节码,运行在虚机上,解释器执行中间代码;
高级语言的发展:
非结构化语言:编号或标签、goto、子程序多个入口和出口;有分支、循环;
结构化语言:任何基本结构只允许是唯一入口和唯一出口;顺序、分支、循环、废弃goto;
面向对象语言:更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承;封装、继承、多态;
函数式语言:古老的编程范式,应用在数学计算、并行处理的场景,引入到了很多现代高级语言中;函数是“一等公民”,高阶函数;如:MS的F语言,JAVA的scaler;
program程序:
程序=算法+数据结构;
算法,解决问题的办法,处理数据的方式,算法有优劣之分;
数据是一切程序的核心,数据结构是数据在计算机中的类型和组织方式;
写程序难点:
理不清数据;
搞不清处理方法;
无法把数据设计转换成数据结构,无法把处理方法转换成算法;
无法用设计范式来进行程序设计;
世间程序皆有bug,但不会debug;
python解释器:
官方cpython,c语言开发,最广泛的python解释器;
ipython,一个交互式、功能增强的cpython;
pypy,python语言写的python解释器,JIT(just in time)技术,动态编译python代码;
jython,python的源代码编译成java的字节码,运行在jvm上;
IronPython,与java类似,运行在.NET平台上的解释器,python代码被编译成.NET的字节码;
高级:
原码、反码、补码;
GC内存管理;
改pip镜像:
mkdir ~/.pip
vim ~/.pip/pip.ini
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
win下:
%APPDATA%,即进到C:\Users\Administrator\AppData\Roaming下;
创建pip目录;
在pip目录下pip.ini
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
win10下pycharm:
用pip安装包时,raw write() returned invalid length 2 (should have been between 0 and 1)
用命令chcp查看,默认936;
chcp 65001 #改为utf8,依旧不起作用;
解决:pycharm编辑框上方有提示,点install;
pycharm调试django项目:
Run-->Edit Configurations
+-->Python
Script Path(项目中的manage.py),Parameters(命令写runserver,也可其它命令);
在代码中打断点,Run-->运行Debug 'debug'