python历史
1,1989年圣诞节,Guido von Rossum开始编写python语言编译器
2,1991年2月,第一个python编译器诞生,是c语言实现的,后面又出现了c#和java版本,可以调用c库函数
3,1994年python1.0正式诞生
4,2000年10月 python2.0发布,实现完整版的垃圾回收,unicode支持,开发过程更加透明,社区影响力扩大,生态圈慢慢形成
5,2008年12月 python3.0发布,并不兼容2.0和之前的版本,但是许多项目还在2.0运行和维护,后来3.0的许多特性被移植到了2.6/2.7版本
python优点
1,简单明确,一件事只用一种方法
2,学习门槛低,容易上手
3,代码开源,社区和生态圈强大,不用重复造轮子
4,解释性语言,天生的平台移植性
5,支持主流编程范式(面向对象和面向函数)
6,扩展性强和可嵌入性,调用c/c++,也可以反向调用
7,代码规范度高,适合代码洁癖的强迫症人群
python缺点
1,执行效率低,计算密集型任务最好由c/c++编写
2,代码无法加密,但是现在的软件公司都是卖服务而不是卖软件,这个问题很淡化了
3,可选框架太多,旧web框架就有100多个,有选择的地方就有错误
python应用领域
云基础设施,DevOps,网络爬虫,数据分析挖掘,机器学习等场景;Web后端开发,数据api开发,自动化运维,自动化测试,科学计算和可视化,数据分析,量化交易,机器人开发,图像识别和处理等职位
环境搭建
......
基础语法
1,计算机硬件组成:运算器,控制器,存储器,输入输出设备。运算器和控制器组成cpu,用来执行各种运算和控制指令以及处理计算机中的数据。程序就是指令的集合,将指令按照一定的方式组织到一起。
2,变量类型
整形(python2.x有int和long两种类型,python3.x只有一种int类型),支持二进制、八进制、十进制、十六进制转换
浮点型 支持科学技术法
字符串型 单引号和双引号中的任意文本比如'hello'和"hello",字符串还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)
布尔型 True和False,注意大小写
复述型 形如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j
变量命名
字母数字下划线组成,不能用字符串开头
大小写敏感
不能跟关键字冲突
PEP8要求(小写字母,下划线拼接;受保护的实例属性用下划线开头;私有实例属性用双下划线开头)
运算符
[] [:] ~ + - * / % // << >> & ^ ` >= <= > < == != is (is_not)in (not in) not or and
分支循环
if elif else 不使用花括号,使用缩进区分代码块
for in 循环
while循环
字符串 列表 元组 的操作和相互转换,字典 集合
面向对象基础
1,面向对象:把一组数据结构和处理他们的方法组成对象,相同的行为对象归纳为类,通过类的封装隐藏内部细节,通过继承实现类的特化和泛化,通过多态实现基于对象类型的动态分派
2,封装:隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口
3,类之间的关系 is-a(继承/范化) has-a(关联) use-a(依赖)
4,继承、多态:在已有的类的基础上创建新类,将已有类的属性和方法直接继承下来,减少重复代码(父类 超类 基类 子类 派生类 衍生类)。我们经常用子类对象去替换父类对象,叫做里氏替换原则。子类可以替换父类的方法(重写)。这样不同的子类对象会出现不同的行为(多态)
图形界面
1,基于tkinter模块的GUI,python默认的GUI开发模块是tkinter,基于TK(跨平台GUI控件),python并不擅长开发GUI应用,还有wxPython、pyQt、pyGTK等
2,GUI通常是事件驱动的,进入主事件循环就要监听鼠标键盘等,并对应代码逻辑处理不同的事件,处理之后继续监听。
3,TK为控件的摆放提供三种布局(Placer,Packer,Grid)
4,Pygame是开源的游戏开发python模块,用于多媒体应用的开发,包含对图像,声音,事件,视频,碰撞等支持,基于SDL(跨平台多媒体库c实现)。
文件和异常
1,文件操作符 w r a x b t +
2,异常处理 try exxept ; with上下文环境管理
正则表达式
1,python提供re模块支持正则表达式
进程和线程
1,进程是系统执行的程序,操作系统以进程为单位分配存储空间,每个进程有自己的地址空间,数据栈和辅助数据,操作系统管理调度进程的执行,分配进程的资源。fork来创建新的进程,进程之间的通信通过IPC实现,包括管道、信号、套接字、共享内存区等
2,线程cpu的执行单元,一个进程可以有多个并发的线程。线程在同一个进程下所以事共享上下文的,数据共享比较简单。
3,python可以通过multiprocessing来进程多进程管理,multiprocessing的queue类可以被多个进程共享的队列,底层信号通过管道和信号量机制实现的
4,python的多线程通过thread模块,但是太过底层很多功能没有,所以大家用的比较多的事threading
5,多线程并不能发挥cpu的多核特性,python解释器有一个全局解释器锁,任何线程执行前都必须获得GIL锁,每执行100字节码,就会释放锁,让别的线程执行
网络编程
1,http协议,requests库是python基于http协议的第三方库,安全,方便
2,套接字,c语言实现的库文件,用于进程之间通信和网络编程,实际开发中套接字分为三类:流套接字,数据报套接字,原始套接字
3,SMTP协议,是简历在TCP协议之上的可靠数据传输的应用级协议,python通过smptlib模块实现
图像和办公文档处理
1,python的OpenPyXL模块,LibreOffice Calc和OpenOffice Calc能够处理excel表格