一个完整的python文件即是一个模块_README.md

# 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

原始数据

按行查看

历史

你可能感兴趣的:(一个完整的python文件即是一个模块_README.md)