Ox00 前言
本文首发于 语雀笔记
Ox01 基础知识
-
Python中变量的特点
-
Python是一个解释型的动态语言。
-
解释型: 它是运行在 PVM 中,指令是逐条翻译执行的
-
动态语言: 变量类型是在运行中确定的,并且变量类型可以改变
-
-
Python中的变量可以看作是一个 void* 指针,指向了实际的数据
-
-
基本变量类型
-
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))
-
-
-
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
-
从一个列表中筛选出所有的字符串并转换为小写
-
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
-
切片操作
- 谁可以使用切片操作
-
列表和字符串可以使用切片操作
- 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是模块名
-
-
匿名函数
-
lambda: 创建一个没有名字的函数
-
函数内不可以有多条语句
-
函数体不可以换行
-
-
不能写return 表达式的值就是返回值
-
-
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(lambda v1, v2: v1 + v2, a, b)
- filter:过滤传入的序列生成一个新的序列
-
filter(函数,序列)
-
将序列内的数据依次放入函数中,将返回值为True的数据,重新组合成一个新的列表
-
b = ['abc', '123', '456', 'def', 'efg']
filter(lambda s: 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): 用于检查设置的值是否合理,可以有多个。
-
-
数据库指令
# 创建一个不存在的数据库并指定编码
CREATE DATABASE IF NOT EXISTS test;
# 删除一个已存在的数据库
DROP DATABASE IF EXISTS test;
# 显示所有的数据库
SHOW DATABASES;
- 表操作指令
# 创建一个表
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;
- 项操作指令
# 向表中指定字段添加数据
INSERT INTO name(column1, column2) VALUES (value1, value2);
# 向表中添加多列数据
INSERT INTO name(column1, column2) VALUES (1,2),(3,4);
# 更新表中指定字段的所有数据
UPDATE name SET column = xxx;
# 更新表中满足条件的指定字段
UPDATE name SET column = xxx [WHERE];
# 删除表中的指定列
DELETE FROM 表名 [WHERE];
# 删除表中所有数据
delete from 表名;
- 查询数据
# 查询表中的所有记录
SELECT * FROM 表名;
# 查找指定字段
SELECT 字段名 FROM 表名;
# 条件查询
# 常见的比较运算符有: > < <= >= = <>
# 可以使用 and or not 组成多个条件的判断
SELECT 字段名 FROM 表名 WHERE 字段名 = ?;
# 模糊查询: % 匹配任意长度字符
select * from 表明 where name like '1%2'
# 模糊查询: _ 匹配任意一个字符
select * from 表明 where name like '_M_'