Ox00 前言
Ox01 基础知识
- Python中变量的特点
- Python是一个解释型的动态语言。
- 解释型: 它是运行在 PVM 中,指令是逐条翻译执行的
- 动态语言: 变量类型是在运行中确定的,并且变量类型可以改变
- Python中的变量可以看作是一个 void* 指针,指向了实际的数据
- Python是一个解释型的动态语言。
- 基本变量类型
- float: 浮点数
- int: 整数
- str: 字符串 ‘’ “” “””三引号可以保留格式”””
- 命名规范
- 和C语言的命名规范一样
- 输入和输出
- Python3:
- input(“”): 返回的始终是字符串
- eval(input(“”)): 返回的是实际输入的类型
- Python2
- input: 和3中的eval(input(“”))一样
- raw_input: 和3中的input一样
- 在 Python2中,print是一个表达式,3中,print是一个函数
- 2: print 123
- 3:print(123)
- 格式化输出
- print(“%d %f” % (10, 10.0)) # 使用%进行输出
- print(“{0} {1:10.8f}”.format(10, 10.0))
- Python3:
- Python中的缩进
- Python中使用缩进标识代码块,不当的缩进会导致异常
Ox10 Python
运算符和表达式
- and or not
- 与或非,返回的结果是True|False
- / //
- /: 表示直接进行除法运算
- 在Python2中,会根据类型保留小数
- 在Python3中,始终都会保留小数
- //: 截断除法
- 无论如何都会舍去小数
- /: 表示直接进行除法运算
- 幂运算
- in not in
- 成员关系运算符,判断当前的值是否在一个序列中
- if (‘a’ in “abc”) => True
- is ==
- is: 判断两个变量的地址是否相等 l1 = l2 l1 is l2 ?
- ==: 判断值是否相等
- != <>
- Python2 中 <> 表示不等,Python3废除
- 为 False 的一些表达式
- if (“”)
- if ([])
- if ({})
- if ((,))
- if (False)
- if (0)
1. 元组
- 元组(不可变的)
- 定义: 关键是 , a = 1, 2 => (1, 2)
- 元组分解(解包)
- 将元组分解出每一个部分进行赋值,可以用于交换两个数
- a = 2;b = 3; a, b = b, a;
- 将元组分解出每一个部分进行赋值,可以用于交换两个数
2. 列表
- 定义: 关键是 [], a = [1]
- 列表的深拷贝
- 默认的赋值时浅拷贝,修改任意一个,都会影响其它的
- 使用 list.copy() 函数可以进行列表的深拷贝
- 列表生成式
- [s.lower()*2 for s in “12Bcd%^&dsad” if s.isalpha()]
- bb cc dd dd ss aa dd
- 从一个列表中筛选出所有的字符串并转换为小写
- [s.lower()*2 for s in “12Bcd%^&dsad” if s.isalpha()]
3. 可变类型
- 区分条件:修改数据的时候是否会改变地址,使用 id 查看地址
- 可变类型:
- 字典、列表
- 不可变类型
- int float str tuple
4. 字典
- 定义:关键是 { 键:值 }, d = {1:”111”, 2:”222”}
- 键和值的要求
- 键(下标): 必须是不可变类型
- 值: 无所谓
- 获取键值对、键、值
- dict.items
- dict.keys
- dict.values
5. 分支和循环
- 顺序结构
- 自上而下
- 选择结构
- if elif else: 使用上和c语言的一样
- 循环结构
- for 元素 in 可迭代序列(列表 字典 元组 字符串 集合)
- 遍历字符串
ss = “123456”
for s in ss:
- … print(s)
- 遍历元组
t = 1, 2, 3, 4, 5, 6
for item in t:
- … print(item)
- 遍历列表
l = [1, 2, 3, 4, 5, 6]
for item in l:
- … print(item)
- 遍历字典
d = {1:”111”, 2:”222”}
for k,v in d.items():
- … print(k, v)
- for break else
- 当for循环被break,就不执行 else
- 当for循环正常退出,则执行else代码
- 遍历字符串
- while
- while 表达式: 缩进的代码
- range
- 返回一个范围内的数据
- range(a, b, c)
- a: 数据的起始位置
- b: 数据的结束位置的后一个
- c: 步长
- range(10, 30, 3)
- 10 13 16 19 22 25 28
- for 元素 in 可迭代序列(列表 字典 元组 字符串 集合)
切片操作
- 谁可以使用切片操作
- 列表和字符串可以使用切片操作
- str[a : b : c]: abc的含义同range len(s)
- 反转一个字符串
- “123456789”[::-1] \ reverse()
- 列表和字符串可以使用切片操作
6. 函数
函数
- 函数的定义
- def 函数的名称 (函数的形参):
函数体 pass
- def 函数的名称 (函数的形参):
- 函数的返回值
- 函数的返回值使用return返回
- 函数的原型中不需要提供返回值
- 函数没有使用return会返回 None
- 参数的传递
- 支持默认参数,支持给指定参数进行赋值 hosts=”xxxx”, add
- 直接传值 def show(item)
- 传元组 def (*args), 传入的数据不能改变
- 传字典 def (**kwargs) ,传入的数据可以被改变
- 空函数:什么也不做的函数
- def func():
pass
- def func():
- 全局变量和局部变量
- 使用 locals() 查看局部变量
- 使用 globals() 查看全局变量
- global
- 在函数中想要使用全局变量,需要在使用前使用 global进行声明
- 在函数中可以使用 global 定义一个全局变量
- 实现一个main函数
- if name == “main“
- 主模块就是直接被运行的模块,否则就是通过 Import 被导入的模块
- 当前模块为主模块的时候,name 才是 main
- 当前模块是被加载的模块,name是模块名
- if name == “main“
- 匿名函数
- lambda: 创建一个没有名字的函数
- 函数内不可以有多条语句
- 函数体不可以换行
- 不能写return 表达式的值就是返回值
- lambda: 创建一个没有名字的函数
- lambda a,b : a if a > b else b
一个用于比较大小的匿名函数
闭包
高阶函数的使用
- reduce:
- 在Python3中,不再内置reduce函数,被放在了 functools模块中
- reduce(匿名函数,一个序列)
- 将序列中的值依次放入指定函数,将函数的返回值作为一个参数和下一个值继续进行运算
- functools.reduce(lambda a, b: a + b, a)
- map:依次对传入的序列调用指定的函数
- map(函数,序列1,序列n)
- 将每一个序列对应位置的数据传入到函数中,将返回的结果重新生成一个序列
- map(函数,序列1,序列n)
a= [‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
>>>b= [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>>list(lambdav1, v2: v1+v2, a, b)
- filter:过滤传入的序列生成一个新的序列
- filter(函数,序列)
- 将序列内的数据依次放入函数中,将返回值为True的数据,重新组合成一个新的列表
b= [‘abc’, ‘123’, ‘456’, ‘def’, ‘efg’]
>>>filter(lambdas: s.isdigit(), b)
类的使用
- 类的定义
- class 类名(父类): 父类是 object
- 类属性和实例属性
- 实例属性:
- 使用 self 或者实例名称可以添加实例属性
- 实例属性只能通过实例进行访问
- 类属性:
- 使用 cls 或者类名可以添加类属性
- 使用实例不可以修改类属性, 但是可以访问
- 使用实例修改类属性相当于添加了一个同名的实例属性
- 推荐使用类名来访问类属性
- 实例属性:
- 方法的种类
- 实例方法:
- 第一个参数始终表示当前的对象,名称通常为 self
- 类方法
- 第一个参数始终为 cls
- @classmethod
- 静态方法
- 静态方法对参数没有要求
- @staticmethod
- 静态方法和类方法在使用上没什么区别
- 实例方法:
- 类的继承
- class 类名(父类1, 父类2):
- 在Python3中,所有的类的基类都是 object
- 通过 isinstance 可以查看一个实例或类型是否是另一个类的子类——————————————————————-
- 在Python中,子类不会主动调用父类的构造函数
- super(子类, self). init ()
- super(). init ()
- 父类名称. init (self, 参数)
- 构造函数和析构函数
- 构造的名字: init
- 析构的名字: del
- Python 的类不会产生二义性,会采用就近原则(继承链)
- 通过 Test.mro() 可以查看继承链
7. 面向对象
- 封装性
- 单下划线 : 模块间私有(只能在本模块内访问到)
- 双下划线 : 模块内私有(只能在类内被访问到)
- 继承
8. 模块导入方式
- 模块的命名
- 模块的名字中不能包含中文字符,不能是纯数字
- 模块的导入
- import XXX
- from functools import reduce 推荐使用的
- from functools import *
- 线程模块
- threading
- Thread(target=线程的起始位置,name=”线程名称”, args=(元组), kwargs={字典})
- python中的线程是伪线程,并且递归的次数有限制,不建议使用递归
- 网络模块
- import socket
- 随机数模块
- import random
- randrange() 返回只当范围的数
- randint() 返回指定范围的数
9. 常用模块
- 字符串操作
- 目录路径
- 日期时间
- 随机数
10.异常处理
- try :在可能产生异常的代码中捕获异常
- except :捕获到了异常就处理异常
- else :当没有捕获到异常的时候,会执行else
- finally:无论有没有产生异常,都执行
- raise:抛出一个指定的异常
# 捕获所有类型的异常并打印异常的信息
try:
可能产生异常的代码
except Exception as e:
print(e)
Ox20 MySql
1. 创建数据库
- create database 数据库名;
2. 创建数据表
- create table 表名( 字段名 字段类型 , 字段名2 字段类型2 );
3. 数据表操作
- 插入数据
- insert into 表名 (字段列表) values(值列表);
- 更新数据
- update 表名 set 字段名=字段的值 where 条件;
- 删除数据
- delete 表名 where 条件;
- 查询数据
- select * from 表名;
Ox30 SQL语法
- SQL约束
- 主键(PRIMARY KEY): 唯一标识数据库表中的每条记录,通常有且只能有一个。
- 外键(FOREIGN KEY):一个表中的外键通常绑定到另一个表的主键,可以有多个。
- 唯一(UNIQUE): 规定该字段的数据是唯一的,可以有多个。
- 非空(NOT NULL): 规定该字段不能为NULL,可以有多个。
- 默认(DEFAULT):指定当不设置数据时的默认值,可以有多个。
- 检查(CHECK): 用于检查设置的值是否合理,可以有多个。
- 数据库指令
```cpp
创建一个不存在的数据库并指定编码
CREATE DATABASE IF NOT EXISTS test;
删除一个已存在的数据库
DROP DATABASE IF EXISTS test;
显示所有的数据库
SHOW DATABASES;
- 表操作指令
```cpp
# 创建一个表
Create table 表名
(
Id int primary key, #主键约束
Name varchar(20) unique, #唯一约束
Age int not null, #非空约束
Sex varchar(5) check(Sex=’男’ or Sex=’女’), #检查约束
Ethnic varchar(5) default ’汉’ #默认约束
);
# 显示所有表
SHOW TABLES;
# 删除一张表
DROP TABLE name;
# 修改列名以及属性名
ALTER TABLE table4 CHANGE name2 char(20);
# 删除一个已存在的列
ALTER TABLE table4 DROP name3;
- 项操作指令
```cpp
创建一个表
Create table 表名 ( Id int primary key, #主键约束 Name varchar(20) unique, #唯一约束 Age int not null, #非空约束 Sex varchar(5) check(Sex=’男’ or Sex=’女’), #检查约束 Ethnic varchar(5) default ’汉’ #默认约束 );
显示所有表
SHOW TABLES;
删除一张表
DROP TABLE name;
修改列名以及属性名
ALTER TABLE table4 CHANGE name2 char(20);
删除一个已存在的列
ALTER TABLE table4 DROP name3;
- 查询数据
```cpp
# 查询表中的所有记录
SELECT * FROM 表名;
# 查找指定字段
SELECT 字段名 FROM 表名;
# 条件查询
# 常见的比较运算符有: > < <= >= = <>
# 可以使用 and or not 组成多个条件的判断
SELECT 字段名 FROM 表名 WHERE 字段名 = ?;
# 模糊查询: % 匹配任意长度字符
select * from 表明 where name like '1%2'
# 模糊查询: _ 匹配任意一个字符
select * from 表明 where name like '_M_'