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
  • 函数的返回值
    • 函数的返回值使用return返回
    • 函数的原型中不需要提供返回值
    • 函数没有使用return会返回 None
  • 参数的传递
    • 支持默认参数,支持给指定参数进行赋值 hosts=”xxxx”, add
    • 直接传值 def show(item)
    • 传元组 def (*args), 传入的数据不能改变
    • 传字典 def (**kwargs) ,传入的数据可以被改变
  • 空函数:什么也不做的函数
    • def func():
      pass
  • 全局变量和局部变量
    • 使用 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)
      • 将每一个序列对应位置的数据传入到函数中,将返回的结果重新生成一个序列

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
  • 类属性和实例属性
    • 实例属性:
      1. 使用 self 或者实例名称可以添加实例属性
      2. 实例属性只能通过实例进行访问
    • 类属性:
      1. 使用 cls 或者类名可以添加类属性
      2. 使用实例不可以修改类属性, 但是可以访问
        1. 使用实例修改类属性相当于添加了一个同名的实例属性
      3. 推荐使用类名来访问类属性
  • 方法的种类
    • 实例方法:
      • 第一个参数始终表示当前的对象,名称通常为 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. 模块导入方式

  • 模块的命名
    • 模块的名字中不能包含中文字符,不能是纯数字
  • 模块的导入
    1. import XXX
    2. from functools import reduce 推荐使用的
    3. from functools import *
  • 线程模块
    • threading
    • Thread(target=线程的起始位置,name=”线程名称”, args=(元组), kwargs={字典})
    • python中的线程是伪线程,并且递归的次数有限制,不建议使用递归
  • 网络模块
    • import socket
  • 随机数模块
    • import random
    • randrange() 返回只当范围的数
    • randint() 返回指定范围的数

9. 常用模块

  • 字符串操作
  • 目录路径
  • 日期时间
  • 随机数

10.异常处理

  • try :在可能产生异常的代码中捕获异常
  • except :捕获到了异常就处理异常
  • else :当没有捕获到异常的时候,会执行else
  • finally:无论有没有产生异常,都执行
  • raise:抛出一个指定的异常
    1. # 捕获所有类型的异常并打印异常的信息
    2. try:
    3. 可能产生异常的代码
    4. except Exception as e:
    5. 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;

  1. - 表操作指令
  2. ```cpp
  3. # 创建一个表
  4. Create table 表名
  5. (
  6. Id int primary key, #主键约束
  7. Name varchar(20) unique, #唯一约束
  8. Age int not null, #非空约束
  9. Sex varchar(5) check(Sex=’男’ or Sex=’女’), #检查约束
  10. Ethnic varchar(5) default ’汉’ #默认约束
  11. );
  12. # 显示所有表
  13. SHOW TABLES;
  14. # 删除一张表
  15. DROP TABLE name;
  16. # 修改列名以及属性名
  17. ALTER TABLE table4 CHANGE name2 char(20);
  18. # 删除一个已存在的列
  19. 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;

  1. - 查询数据
  2. ```cpp
  3. # 查询表中的所有记录
  4. SELECT * FROM 表名;
  5. # 查找指定字段
  6. SELECT 字段名 FROM 表名;
  7. # 条件查询
  8. # 常见的比较运算符有: > < <= >= = <>
  9. # 可以使用 and or not 组成多个条件的判断
  10. SELECT 字段名 FROM 表名 WHERE 字段名 = ?;
  11. # 模糊查询: % 匹配任意长度字符
  12. select * from 表明 where name like '1%2'
  13. # 模糊查询: _ 匹配任意一个字符
  14. select * from 表明 where name like '_M_'