专栏自述:随着这几年机器学习火爆,楼主写了Java好多年,python其实也会写,但是缺乏系统性梳理,所以搞一个python栏目,系统性梳理的同时也把python的知识做一些梳理,欢迎查阅,欢迎一起学习python
传送门:
- 7天入门Python 1 — Python本地安装
- 7天入门Python 2 — Python认识
- 7天入门Python 3 — Python对象属性及核心数据类型
- 7天入门Python 4 — 运算符、条件及循环
- 7天入门Python 5 — 函数、模块及异常
- 7天入门Python 6 — 输入输出、文件及OS
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
Python程序执行过程
如上图所示,python作为高级解析型语言,源代码文件 xxx.py 文件在第一次执行时,被编译成字节码 pyc,也就是python字节码,这些字节码在 解析器 的interpreter 中执行,解析器被称为PVM,也就是Python虚拟机。实际上,编译python 源文件也是由PVM 编译,当编译结束时,由 PVM 读取python字节码(.pyc)文件,在处理器进行执行,这就是python的执行过程了
Python的实现方式
Cpython
- 原始、标准的实现方式,也就是使用C语言开发的python
Jython
- 用于与Java语言集成的PVM,这也就是Jython
Ironython
- 用于与 .Net 框架集成的实现,也就是 .Net 语言实现的PVM
当然Cpthon是运行最快的实现方式,Jython能够在运行时直接调用外部的Java类库。这对转Python的Java开发者是一个非常友好的,所以Jython是比较好的方式啦
Python性能优化工具
Psyco
- Python语言的一个扩展工具,可以即时对程序代码进行专业的算法优化,可以在一定程度上提高程序的执行速度,尤其在程序有大量循环操作时
- 目前开发工作已经停止,由 PyPy 所接替
PyPy
- PyPy是用Python实现的Python解析器
- Python语言的动态编译器,是Psco的后继项目
- 可以运行在Linux的32位和64位、MacOS 和 Windows的32位平台中
Shed Skin
- Python解析器,能够将Python代码优化成C++代码
Python编写和执行
交互式编译器
有两种方式,第一种是启动Python安装目录的IDLE程序执行,还有就是通过cmd 命令py 或 python 启动执行(实际上也是运行IDLE)
Python程序文件
- 交互式模式下的程序执行完成后难以再次运行
- 将编写的程序文件保存至 .py 中方便多次运行
- python的此类包含了一系列预编译好的语句的程序文件称为“模块”
- 能够直接运行的模块文件通常称为脚本(即程序的顶层文件)
Python程序文件
- 例如,新建一个名为firstpycode.py 的文件,内容如下所示
#!/usr/bin/python
import platform
print(platform.uname())
- 第一行为shebang,即执行时脚本时通知内容要启动的解析器
- 第二行为 import 导入一个python模块platform
- 第三行打印 platform 模块的 uname 方法的执行结果
给以改脚本执行命令,并执行即可
# chomd +x firstpycode.py
# ./firstpycode.py
Python程序可以分解成模块、语句、表达式和对象
- 程序由模块构成
- 模块包含语句
- 语句包含表达式
- 表达式建立并处理对象
- 表达式是“某事”,而语句是“做某事(即指令)”
- 语句的特性:它们改变了事务,例如,赋值语句改变了变量,print语句改变了屏幕输出等
数据结构
- 通过某种方式(例如对元素进行编码)组织在一起的数据元素的集合,这些集合可以是数字或者字符,甚至可以是其他的数据结构
- Python 的最基本的数据结构是序列
- 序列中的每个元素分配一个序号 —— 即元素的位置,也称为索引:索引从 0 开始编号
- Python 包含 6 种内建的数据序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象
Python的关键要素
- 基本数据类型
- Integral类型
- 整型:不可变类型
- 布尔型:True,False
- 浮点类型
- 浮点数
- 复数
- 字符串
- Integral类型
- 对象引用
- Python 将所有数据存为内存对象
- Python中,变量事实上是指向内存对象的引用
- 动态类型:在任何时刻,只要需要,某个对象引用都可以重新引用一个不同的对象(可以是不同的数据类型)
- 内建函数 type() 用于返回给定数据项的数据类型
- "=" 用户变量名与内存中的某对象绑定:如果对象事先存在,就直接进行绑定;否则,则由 "=" 创建引用的对象
- 变量命名规则
- 只能包含字母、数字和下划线,且不能以数字开头
- 区分字符大小写
- 禁止使用保留字
- 命名惯例
- 以单一下划线开头变量名 (_x) 不会被 from module import * 语句导入
- 前后有下滑先的变量名 (_x_) 是系统定义的变量名,对python解析器有特殊意义
- 以两个下划线开头但结尾没有下划线的变量名 (__x) 是类的本地变量
- 交互模式下,变量名 "_" 用于保存最后表达式的结果
- 注意:变量名没有类型,对象才有
- 组合数据类型
- 数据结构:通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合
- Python 常用的组合数据类型
- 序列类型
- 列表:使用 [] 创建,如 ['Call me', 'Inhmeal', '.']
- 元组:使用 () 创建,如 ('one', 'two')
- 字符串也属于序列类型
- 集合类型
- 集合
- 映射类型
- 字典
- 序列类型
- 字典是可变对象,元组是不可变序列
- Python 中,组合数据类型也是对象,因此其可以嵌套
- 如 ['hello', 'world', [1, 2, 3]]
- 实际上,列表和元组并不真正存储数据,而是存放对象引用
- Python对象可以具有其可以被调用的特定"方法(函数)"
- 元组、列表以及字符串等数据类型是"有大小的",也即,其长度可以通过内置函数 len() 测量
- 逻辑操作符
- 逻辑运算时任何程序设计语言的基本功能
- Python 提供4组逻辑运算
- 身份操作符
- is:判定左端对象引用是否相同于右端对象引用:也可以与 None 运行
- 比较操作符
- <,>,<=,>=,!=,==
- 成员操作符
- in 或 not in;测试成员关系
- 逻辑运算符
- and,or,not
- 身份操作符
- 控制流对象
- 控制流语句是过程是编程语言的基本控制机制
- Python的常见控制流语句
- if
- while
- for ... in
- try
- 算术操作符
- Python提供了完整的算法操作符
- 很多的 Python 数据类型也可以使用增强的复制操作符,如 +=、-=等
- 同样的功能,使用增强型复制操作符的性能较好
- Python的 int 类型是不可变的,因此,增强型复制的实际过程是创建一个新的对象类存储结果后变量名执行了重新绑定
- 输入/输出
- 现实中,具有实际功能的程序必须能够输入(如从键盘或文件中),以及产生输出,并写到终端或文件中
- Python 的输入/输出
- 输出
- Python3:print() 函数
- Python2:print 语句
- 输入
- input()
- row_input()
- 输出
- Python 解析器提供了3中标准文件对象,分别为标准输入、标准输出和标准错误,它们在 sys 模块中分别以 sys.stdin、sys.stdout 和 sys.stderr 形式提供
- Python的 print 语句实现打印 —— 一个对程序员友好的标准输出流接口
- 从技术角度来讲,print 是把一个或多个对象转化为其文本表达形式,然后发动给标准输出或另一个类型文件的流
- 在 Python 中,打印与文件和流的概念联系紧密
- 文件写入方法是吧字符串写入到任意文件‘’
- print 默认吧对象打印到 stdout 流,并添加了一些自动的格式化
- 实际上,print语句只是 Python 人性化特点的具体实现,他提供了 sys.stdout.write() 的简单接口,再加一些默认的格式设置
- print 接受一个逗号分隔的对象列表,并为行尾自动添加了一个换行符,如果不需要,则在最后元素后添加逗号
- 在 Python 中,打印与文件和流的概念联系紧密
- 函数的创建于调用
- Python 有众多内置函数
- Python 标准库拥有众多内置模块,这些模块拥有大量函数
- Python 模块实际上就是包含Python代码的 .py 文件,其拥有自定义的函数及变量等
- 导入模块使用 import 语句进行,后跟模块名称(不能指定模块文件的后缀 .py)
- 导入模块后,可以使用期内部憨厚的任意函数、类及变量
语句和语法
- 注释
- #:可以从一行的任何地方开始
- 续行
- \
- ''':三个单引号,闭合操作符,单一语句跨多行
- 代码组
- 缩进相同的一组语句构成一个代码块
- 首行以关键字开始,如if、while等,以冒号结束
- Python使用缩进来分隔代码组,同一代码组的代码行必须严格左对齐,否则会造成语法错误
- 同一行防止多个语句
- ;:以分号作为分隔符
- 模块
- 每一个 Python 脚本文件都可以被当成是一个模块
- 模块里的代码可以是一段直接执行的脚本,也可以是一些类似库函数的代码从而可由别的模块执行导入 (import)
标识符
- 标识符是计算机语言中允许作为名字的有效字符串集合
- 其中有一部分关键字,它们是语言的标识符,因此是保留字不能用于其他用途
- Python还有成为"内建"的标识符集合,虽不是保留字,仍不推荐使用这些特别的名字
- Python标识符
- 第一个字符不能使用字母或下划线
- 余下的字符可以使用字母、数字或下划线
- 区分字母大小写
Python基本编程风格
- 既不能缺少注释,亦要避免过度注释
- 文档
- Python允许通过 __doc__ 动态获得文档子串
- 缩进
- 统一缩进4个字串
- 标识符名称
- 见名知义
- Python风格指南
Python 文件结构
- 起始行
- 模块文档
- 模块导入
- (全局)变量定义
- 类定义(若有)
- 函数定义(若有)
- 主程序
实例如下:
#/usr/bin/env python
"this is a test module"
import sys
import os
debug = True
class FooClass (object) :
"Foo class"
pass
def test() :
"test function"
foo = FooClass()
if debug :
print('ran test()')
if __name__ == '__main__':
test()
- 主程序
- 无论当前模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码
- 注意:所有的模块都有能力执行代码
- 最高级别的 Python 语句(没有缩进的)在模块被导入时就会执行,无论是否真的需要执行
- 妥当的做法:除了那些真正需要执行的代码以外,所有功能代码都需要通过函数建立,因此
- 仅在主程序模块中编写大量的顶级可执行代码
- 用于被导入的模块只应该在较少的顶级执行代码
- __name__指示模块应该如果加载
- 如果模块是被导入,__name__的值是模块名字
- 如果模块是直接执行,__name__的值是 '__main__'
下一节:7天入门Python 3 — Python对象属性及核心数据类型
感兴趣的同学可以点关注哦,持续更新~