# python笔记
#### 项目介绍
本项目主要记录和展示本人自学python的成果。会定期并永久地更新(理解有错的地方还望大家给我指出来~小弟不甚感激)。
![部分思维导图_1](https://images.gitee.com/uploads/images/2018/0919/213027_6fb1a77c_744374.png "1.PNG")
![部分思维导图_2](https://images.gitee.com/uploads/images/2018/0919/213106_57c9db95_744374.png "2.PNG")
# 开始
## 一、python基础语法
### 1、变量名(用于引用变量和标识对象)
> * 标识符:命名规则【首字符必须是字母或者是下划线,其余可以是字母、下划线、数字。】
> * 关键字【33个】:>False None True and as def if del import raise return elif in else except is try while with assert finally break class continue for lambda nonlocal not yield<
> * 变量管理:python变量管理。每个对象在被创建的时候都会获得一个身份id,可以用id()查看。【PS:这个是不是和c语言的指针与内存地址概念差不多】,哈哈,python确实有个特殊的地方("小整数(默认范围为[-5, 256])和字符串是不可变的,Python 为 了优化速度采用高效的方式去存储")。
### 2、表达式 语句
> * 表达式:用运算符(算术运算符、位运算符、比较运算符、逻辑运算符、赋值运算符()...)连接的各种类型的数据的式子就是表达式。“**任务中一个具体的组成部分**”。
> * 语句:完整执行一个任务的一行逻辑代码。
### 3、赋值操作
> * 增量赋值:增量赋值(+=、-=......)。
> * 链式赋值:链式赋值(a = b = 123)。
> * 多重赋值:多重赋值(**等号左右两边都以元组的方式出现**”),元组“(1,2)“方式![多重赋值](https://images.gitee.com/uploads/images/2018/0919/212806_352bca5a_744374.png "多重赋值.PNG")
> * 拓展:元组(Tuple) 数据结构(用逗号来创建元组,以圆括弧形式输出)。
> * 动态、强类型语言:python中的赋值是不用变量声明的(str = "hello world"),因为python属于一种动态强类型语言,变量的类型根据赋的值的类型而决定的(运行过程中),并且它是通过“**引用**(指针概念)”的方式赋值的。
### 4、标准数据类型
> * 整型(int):整型和长整型并不严格区分,且不存在“溢出”的问题(其范围是:(32位)-2的31次方到2的31次方减1,(64位)-2的63次方到2的63次方减1)
> * 布尔值(bool):只有两个值(true,false),**本质**是用1和0来储存的。
> * 浮点型(float):1.11,亦可使用科学计数法。
> * 复数型(complex)(感觉很厉害的样子):实数+虚数(j)。实数和虚数分离(复数.real 和 复数.imag)、**复数的共轭**(复数.conjugate())。
> * 序列类型:可变类型(列表list,使用“[]”表示)、不可变类型(字符串str,使用“单双三”引号表示、元组tuple,使用“()”表示)。
> * 映射类型 字典(dict):和**JSON**一样,都是使用键值对来表示。
### 5、基本运算
>* 算术运算:乘方**、正负号+ -、 乘除、整除//、 取余%、加减+ -。
> * 比较运算符:数值的比较:按值比大小;字符串的比较:按ASCII码值大小。
> * 逻辑运算: 优先级(not 、 and 、 or)。
> * 字符运算符:原始字符串操作符 (r / R)。
> * 综合运算:3 < 2 and 2 < 1 or 5 > 4。
### 6、函数 模块 包
> * 函数:完成一个特定功能的一段代码。python内置函数:abs()、pow()......。
* 查看内置函数:使用命令dir(【两条下划线】builtins【两条下划线】)、使用help()来查看指定内置函数。
> * 模块:一个完整的Python文件即是一个模块。文件:xx.py;模块:xx
> * 包:一个有层次的文件目录结构,定义了一个由模块和子包组成的python应用程序执行环境。
> * 库:一组具有相关功能的模块的集合。
### 7、流程控制
#### 条件结构
> if语法、else语法、elif语法
此处有例图
#### 循环结构
> while循环、for循环
此处有例图
> **延伸:**
>
- **列表解析**:“[num for num in range(0,20)]”,精简的形式,使其运行速度更快。这种方式也可以使用for循环形式来实现。
- **生成器表达式:**“(num for num in range(0,20))”,这种形式和列表解析差不多,只是它是用“()”来表示,它并不像列表一样放回列表数据,而是直接返回一个生成器“generator”对象,所以要想得到数据,就要用next()函数来实现(因为这种方式属于惰性计算)。但是next()函数使用一次只能得到一个数据,要想得到多个数据,next()显然不是最优的方法,所以我们可以使用循环来操作(generator对象也是一种可迭代的对象)。**最后再谈到一点**:列表(list)能实现的,生成器也可以,只不过生成的数据量一旦庞大,列表这种方式就会影响性能。
> - **循环中的“控制”**
- break语句:结束并跳出当前最近的循环体
- continue语句:结束当前最近的循环体,执行下一次循环
- else语句:如果循环体从break手动结束终止,则跳出循环,但要是正常结束,则执行else里的语句块(使用continue语句,else也会执行)
> - **字典解析**
- 字典:属于映射类型,可变类型模型。使用“{}”来表示,里面是"key:value"形式。使用*[Attr_name]来表示或者修改。和json格式数据形式差不多(和js中{}对象形式也差不多)
- 字典解析:待遇到这种情况之后,再来详解
> - **字典解析**
- 集合(set):是一个无序的不重复元素序列。可以用set()和“{}”来创建,但是空集合不能使用“{}”创建,因为“{}”是用来创建空的字典。【注意】:set()里面的只能是一个参数,并且是一个**可迭代**的对象哟
#### 拓展
> 1. random模块
> 2. range()函数
> 3. 格式化输出
> 4. 递归
- 演算过程
- 1、逐层递归调用
- 2、遇到边界停止递归
- 3、逐层返回调用结果到最初层
- 递归的缺点
由于递归是不断的调用自身,系统资源消耗会比较大。
#### 函数
> 1、内置函数
使用dir(__builtins__)查看python的内置函数
> 2、自定义函数
- **默认函数:**对于形参进行赋值。【注意】:默认参数必须放在参数列表的后面,否则会报错。
- **关键字参数:**“实参(x = 10,y = 10)”,一旦使用了关键字参数,则实参必须全部使用 关键词参数。
- **传递函数:**一个函数作为另一个函数的参数进行传递。
- **匿名函数:**(lambda x:x + x)
> 3、python标准库函数
- **os模块:**负责程序操作系统的交互,提供了访问操作系统底层的接口。
- **math模块(数学)**
- **random模块(随机)**
- **datetime模块(日期)**
- **time模块**
> 4、第三方库
#### 获取数据?
如何获取?打开文件 → 读取文件 → 写入文件 → 关闭文件。如果没有关闭文件的话,则可能会缓存写入的数据,假设程序异常崩溃,就会导致不能写入文件,但使用 with as 语句的话,则可以不用手动关闭文件。
> 1、本地获取
- open函数
- 参数一【必选】:filename。文件名或者路径
- 参数二【可选】:mode。以什么样的模式打开,默认是”r“模式
- 参数三【可选】:buffering。。默认为-1(0表示不缓冲、1或大于1的值表示缓冲一行或指定缓冲区大小)
- 返回值:
- 返回一个file对象
- 这个对象可以被迭代
- 关闭和读写文件相关的函数\方法(字符串)
- 文件指针定位
- seek函数
- 参数一【必选】:offset。表示偏移量(从哪里开始)
- 参数二【可选】:whence = 0。表示指针的位置,”0“:文件头部(默认);”1“:当前位置;”2“:文件尾部
- 网络获取(爬数据:必须遵循网站协议:rotots.txt)
- 抓取
- urllib内建模块(渐渐被替代)
- urllib.request
- requests 第三方库
- 适合中小型网络爬虫开发
- Scrapy框架
- 适合大型网络爬虫开发
- 解析
- beautifulSoup库
- re模块
- python集成模块,适合精细化解析
#### 序列
> 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
- 常用:字符串(str)、列表(list)、元组(tuplpe)
- 共同特性:都可迭代;都可以进行的操作包括索引,切片,加,乘,检查成员。
- 访问模式:元素从头(0)开始,通过下标偏移访问(正序);从末尾(-1)开始下标偏移也可以访问(逆序)。
- 相关操作
- 标准类型运算符
- 值比较
- 、>=、<=、==、!=
- 比较的是ASCII码
- 对象身份比较
- is
- is not
- 比较的是id身份(内存应用地址)。在python中为了提高数据存储效率,在[-5, 256]之间,值相同,地址也相等。
- 布尔比较
- not(非)
- and(并且)
- or(或者)
- 序列类型运算符
- 获取
- arr[0]:下标访问
- arr[i:j]:从i开始到j(不包括j)之间的元素
- arr[i:j:k]:从i开始到j(不包括j),每个K个元素就取一个数,最终返回一个序列
- 重复
- 'a' * 3
- 连接
- 'hello' + 'world'
- 序列内建运算符
- str():例,将元组、列表转换成”字符串“
- list():例,将字符串、元组转换成”列表“
- tuple():例,将字符串、列表转换成”元组“
- 其他序列内建
一键复制
编辑
Web IDE
原始数据
按行查看
历史