总结(6)--- python基础知识点小结(细全)

===========================================================================================================================================
基础: 一、列表
===========================================================================================================================================
1. 取出元素------------------------->>-: 变量=列表[索引]

2. 添加元素------------------------->>-: 列表.insert(位置,要添加的元素)

列表.append(要添加的元素)

列表.exntend([元素,元素,元素,元素])

3. 修改元素------------------------->>-: 列表[索引] = "将要被修改成的元素"

4. 删除元素------------------------->>-: del 列表[索引]

列表.remove(元素) #-只能删一个元素

列表.pop() #-只能删除最后一个元素

列表.pop(索引) #-只能删一个元素

列表.clear() #-清空

5. 统计元素------------------------->>-: print(len(列表)) #-查列表内元素的数量

if 元素 in 列表: #-判断列表中是否包含某元素

变量 = 列表.count(元素) #-查元素出现次数

变量 = 列表.index(元素) #-查元素索引

6. 元素排序------------------------->>-: 列表.sort() #-升序

列表.sort(reverse=True) #-降序

列表.reverse() #-反转

7. set()去重------------------------>>-: set(a)

===========================================================================================================================================
基础: 二、字典
===========================================================================================================================================
1. 字典取值------------------------->>-: 变量 = 字典[键] #-如果没有key会报错

变量 = 字典.get(键) #-如果没有key不会报错,返回None

变量 = 字典.get(键,"") #-如果没有key不会报错,返回引号中的内容

变量 = 字典.keys() #-可以把字典中的所有key以视图对象的方式遍历出来,
视图对象可随意更改成列表、元祖类型。
取出的内容没有顺序

for key in 字典.keys() #-遍历所有键

for value in 字典.values() #-遍历所有值

for item in 字典.items() #-遍历所有键和值

for key,value in 字典.inems() #-遍历所有键和值,遍历一次自动换行

for key in 字典:
print(key, 字典[key]) #-打印效果:> key values

2. 增加键值对----------------------->>-: 字典[键] = 值 #-无则增,有则改

3. 删除键值对----------------------->>-: del 字典[键] #-删除指定键

字典.pop(键) #-删除指定键

变量 = 字典.pop(键) #-删除键,并返回被删键

变量 = 字典.popitem() #-随机删除一个键值对

4. 改值----------------------------->>-: 字典[键] = 值

字典.update({键:值,键:值}) #-更新键值对

===========================================================================================================================================
基础: 三、字符串
===========================================================================================================================================
1. 判断开头------------------------->>-: if 字符串变量.startswith("条件")

2. 判断结尾------------------------->>-: if 字符串变量.endswith("条件")

3. 左-->右查找---------------------->>-: 新变量 = 字符串的变量.find("判断条件") #-未找到返回-1, 找到返回索引

4. 右-->左查找---------------------->>-: 新变量 = 字符串的变量.rfind("判断条件") #-未找到返回-1, 找到返回索引

5. 替换----------------------------->>-: 新变量 = 字符串的变量.repiace("被替换的",“替换成”)

新变量 = 字符串的变量.repiace("被替换的",“替换成”,替换数量)

6. 转为大写------------------------->>-: 新变量 = 变量.upper()

7. 转为小写------------------------->>-: 新变量 = 变量.lower()

8. 居中对齐------------------------->>-: 新变量 = 变量.center(字符长度,“内容外要显示的东西”)

9. 左对齐--------------------------->>-: 新变量 = 变量.ljust(字符长度,“内容外要显示的东西”)

10.右对齐--------------------------->>-: 新变量 = 变量.rjust(字符长度,“内容外要显示的东西”)

11.去除头尾------------------------->>-: 新变量 = 变量.strip(“去除内容”)

12.去除左右/替换-------------------->>-: 新变量 = 变量.repllace("去除内容","去除内容替换为")

13.拆分----------------------------->>-: 新变量 = 变量.split("内容") #-拆分字符串并删除"内容"

14.拼接----------------------------->>-: 新变量 = 变量 + 变量

新变量 = 变量.join(["内容","内容","内容"])


===========================================================================================================================================
一. udp
===========================================================================================================================================
udp----创建------------------------->>-: from socket import *
udp_socket = socket(AF_INET, SOCK_DGRAM)

dup----发送------------------------->>-: udp_socket.sendto(内容.encode(编码), (ip, 端口))

dup----接收------------------------->>-: recv_data = udp_socket.recvfrom(最大接收字节数)

dup----绑定固定端口号--------------->>-: udp_socket.bind(变量) #《变量 = ("", 端口号)》

udp----接收显示--------------------->>-: print(recv_data.decode(解码))

udp----关闭套接字(socket)----------->>-: udp_socket.close()

===========================================================================================================================================
二. tcp客户端
===========================================================================================================================================
tcp----客户端创建------------------->>-: from socket import *
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

tcp----连接服务器------------------->>-: tcp_client_socket.connect((服务器ip, 服务器port)) #《port:---端口号》

tcp----发送------------------------->>-: tcp_client_socket.send(内容.encode(编码))

tcp----接收------------------------->>-: recv_data = tcp_client_socket.recv(最大接收字节数)

tcp----接收显示--------------------->>-: print(recv_data.decode(解码))

tcp----关闭套接字------------------->>-: tcp_client_socket.close()

===========================================================================================================================================
三. tcp服务器
===========================================================================================================================================
tcp----服务器创建------------------->>-: from socket import *
tcp_server_socket = socket(AF_INER, SOCK_STREAM)

tcp----设置重用端口号--------------->>-: server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) #《1代表设置 0代表取消》

tcp----绑定端口号------------------->>-: tcp_server_socket.bind(("", 端口号))

tcp----转为监听模式----------------->>-: tcp_server_socket.listen(128)

tcp----为客户端安排沟通套接字------->>-: tcp_client_socket, tcp_client_addr = tcp_server_socket.accept()

===========================================================================================================================================
四. 获取当前时间
===========================================================================================================================================
1.导入模块-------------------------->>-: import datetime

2.调取当前时间---------------------->>-: now_time = datetime.datetime.now()

3.更改时间显示格式------------------>>-: a = now_time.strftime("%Y-%m-%d %H:%M:%S")

4.显示时间-------------------------->>-: print(a)

===========================================================================================================================================
五. 线程创建
===========================================================================================================================================
1.线程模块导入:--------------------->>-: import threading

2.基本子线程创建方法:--------------->>-: t1 = threading.Thread(target=xxx, args=(参数,))
t1.start()

3.面向对象方式创建子线程方法:------->>-: class MyTherad(threading.Thread):
def run(self):
self.类方法

def...

def main():
for i in range(子线程数量)
t1 = MyThread()
t1.start()

4.查看线程数量方法:----------------->>-: 变量(线程数量)= len(threading.enumerate())

5.创建互斥锁:----------------------->>-: mutex = threading.Lock()

6.锁定------------------------------>>-: mutex.acquire()

7.释放------------------------------>>-: mutex.release()

===========================================================================================================================================
六.进程创建
===========================================================================================================================================
1.进程模块导入:--------------------->>-: from multiprocessing import Process

2.2.基本子进程创建方法:------------->>-: P1 = Process(target=xxx, args=(参数,))


3.面向对象方式创建子进程方法:------->>-: class MyProc(multiprocessing.Process):
def run(self):
self.类方法

def...

def main():
for i in range(子进程数量)
t1 = MyProc()
t1.start()

4.自动创建子进程方法:(多进程必用)
1.输入信息-->赋值给变量
2.将信息变量打包成元祖,转给类,然后将类看成一个变量,返回
类变量 = 类(信息变量,信息变量,信息变量)
3.创建子进程:
pro = multiprocessing.Process(target=类变量.类方法)
pro.start()

5.获得进程pid----------------------->>-: 想要获得的地方打印 print(os.getpid())

6.获得父项进程pid------------------->>-: 想要获得的地方打印 print(os.getppid())

===========================================================================================================================================
七. 进程间通信 用Queue队列
===========================================================================================================================================
1. 导入Queue模块:------------------->>-: form multiprocessing import Queue

2.创建Queue对象:-------------------->>-: q = Queue(接收消息的数量)

3.发送消息:------------------------->>-: q.put(内容)

4.接收消息:------------------------->>-: q.get()

5.返回队列消息数量------------------>>-: q.qsize()

6.查看消息队列空-------------------->>-: q.empty()

7.查看消息队列满-------------------->>-: q.full()

===========================================================================================================================================
八. 进程池Pool(多进程必用)
===========================================================================================================================================
1.导入进程池模块:------------------->>-: from multiprocessing import Pool

2.创建进程池:----------------------->>-: po = Pool(最大进程数)

3.往进程池中添加一个任务(一):------->>-: po.apply(func=函数)
#《执行完一个任务后,才会开始执行下一个任务,可以不加join》

4.往进程池中添加一个任务(二):------->>-: po.apply_async(func=函数)
#《多个任务同时去做,关闭进程池后必须加po.join》

5.关闭进程池------------------------>>-: po.close()

6.阻塞等待所有进程任务运行结束:----->>-: po.join()

===========================================================================================================================================
九.迭代器
===========================================================================================================================================
1. 迭代器生成方法(一):------------->>-: 变量 = (公式 for循环)

2. 迭代器生成方法(二):------------->>-: 函数内加 yield 后跟接收的变量

3. yield 多任务切换:--------------->>-: 1.创建第一个任务函数
#《函数最后加 yield 和 time.sleep(0.5)》
2.创建第二个任务函数
...
3.调用生成器函数,产生生成器对象-------w1 = 第一个任务函数()
w2 = 第二个任务函数()
4.循环调用生成器进行任务切换----------while True:
next(w1)
next(w2)

===========================================================================================================================================
十. 协程
===========================================================================================================================================
1.判断对象是否可迭代---------------->>-: 1.导入模块:-------from collections import Iterable
2.isinstance(a, Iterable) #《a:-----要查询的数据》

2.greenlet多任务切换:--------------->>-: 1.导入greenlet模块:----from greenlet import greenlet
2.创建greenlet对象-----gr1 = greenlet(任务1)
gr2 = greenlet(任务2)
...

3.任务中添加切换功能---任务1结尾添加 gr2.switch()
time.sleep(0.5)

任务2结尾添加 gr1.switch()
time.sleep(0.5)

4.启动位置添加程序段:----------------gr1.switch()

3.gevent多任务切换(主要用):--------->>-: 1.导入模块----------from gevent import monkey
monkey.patch_all()
#《多任务同时进行》 import gevent
import time

2.创建任务函数 函数内容末尾必须加time.sleep()

3.创建并启动协程----g1 = gevent.spawn(任务函数,如果有要传的参数直接写在这里)
g2 = gevent.spawn(任务函数,如果有要传的参数直接写在这里)
g3 = gevent.spawn(任务函数,如果有要传的参数直接写在这里)
time.sleep()

4.添加主进程保护----gevent.joinall([g1,g2,g3])

4.gevent多任务切换(主要用):--------->>-: 1.导入模块------>>-:import gevent
import time
#《单任务执行后切换任务》
2.创建任务函数

3.创建并启动协程----g1 = gevent.spawn(任务函数,如果有要传的参数直接写在这里)
g2 = gevent.spawn(任务函数,如果有要传的参数直接写在这里)
g3 = gevent.spawn(任务函数,如果有要传的参数直接写在这里)

4.添加主进程保护----gevent.joinall([g1,g2,g3])

===========================================================================================================================================
十一. 网页内容下载方法(非https)
===========================================================================================================================================
1.导入模块:------------------------->>-: import urllib.request

2.创建任务函数(url):---------------->>-: response = urllib.request.urlopen(url) url:网页赋值变量
data = response.read()

3.创建并启动协程-------------------->>-: begin = time.time() #记录当前时间 -----开始
.....
end = time.time() #记录当前时间 -----结束
print("用时%f s" % (end - begin))

===========================================================================================================================================
十二. 正则表达式
===========================================================================================================================================
各种表达式-------------------------->>-: 匹配单个字符:

.---> 匹配任意一个字符,除了
[]--> 匹配[]中列举的字符
[-]--> 匹配字符的范围
[0-9]
[a-z]
[A-Z]
[^]--> 对其中字符禁止匹配--表示[]中的字符都不参与匹配
d---> 表示匹配一个数字----等价于[0-9]
D---> 表示匹配一个非数字--等价于[^0-9]
s---> 表示匹配一个空白字符-----等价于[ fv]
S---> 表示匹配一个非空白字符---等价于[^ fv]
w---> 表示匹配一个单词字符-----等价于[a-zA-Z0-9_]
W---> 表示匹配一个非单词字符---等价于[^a-zA-Z0-9_]

匹配多个字符:
{n} ----> 代表前面的字符可以匹配n次
{n,m}---> 代表前面的字符最少匹配n次,最多匹配m次
{n,}----> 代表最少匹配n次即可,上不封顶
+ ------> 代表最少匹配1次
* ------> 代表最少匹配0次
? ------> 代表匹配0次或者1次

将匹配的内容单独输出方法(网页篇):

匿名分组-------------------------->>-: data = re.match(r"()","") 在表达式中用括号括起来想要单独输出的内容即可.第一个括号用
group(1)调出. 第二个括号用group(2)调出. 以此类推

有名分组-------------------------->>-: data = re.match(r"<(?P<html>w+)>(.*)</(html)>",a)
#创建顺序----->data = re.match(r"","")--->re.match(r"<()><>",a)--->re.match(r"<(?P<名字>表达式)></(名字)>",a)


1.导入模块-------------------------->>-: import re

2.只查开头-------------------------->>-: re.match(r"a","b") #《a-正则表达式; b-搜索范围》

3.查某内容(只查一部分,后面不再查)--->>-: re.search(r"a","b") #《a-正则表达式; b-搜索范围》

4.查所有内容(输出全部要查找的内容)-->>-: re.findall(r"a","b") #《a-正则表达式; b-搜索范围》

5.将匹配的数据进行替换-------------->>-: re.sub("a", "b", "c") #《a-正则表达式; b-要被替换的; c-将被替换成》

6.切割------------------------------>>-: re.split(r"a","") #《a-正则表达式,表示按什么切分; b-要被切割的数据》

7.输出内容-------------------------->>-: group(n) #《n-分组编号》

8.以元祖的方式输出内容-------------->>-: groups()


正则表达式编译功能:
1.将表达式封装---------------------->>-: 变量 = re.compile(r"表达式")

2.调用------------------------------>>-: ↑变量.match/search/findall(搜索范围).group()


===========================================================================================================================================
十三. 正则表达式------将接收到的data内容用正则表达式从中单独提取出需要的部分
===========================================================================================================================================
1.接收内容-------------------------->>-: data = XXXX.recv(4096)

2.解码------------------------------>>-: str_data = data.decode()

3.内容拆分到列表中------------------>>-: data_list = str_data.split(" ") #以网页请求为例. 括号内为以 为基准切分

4.将列表中[0]号参数取出------------->>-: list_0 = data_list[0]

5.正则取出参数中的路径-------------->>-: re_list_0 = re.match(r"/w/s(/S)", list_0)

6.取出的历经赋值给变量-------------->>-: puth_info = re_list_0.group(1)


===========================================================================================================================================
十四. Mysql---数据库
===========================================================================================================================================
数据库:
1.查看数据的存放位置(ubuntu)-------->>-: sudo su #进入最高权限
cd /var/lib/musql #数据存放的路径

1.1修改mysql数据库密码-------------->>-: mysqladmin -uroot -p旧密码 password 新密码

1.2数据库的备份--------------------->>-: 先切换路径到桌面,然后--->>: mysqldump -uroot -p 源数据库 > 新文件.sql

1.3数据库的恢复--------------------->>-: 先创建一个同名的数据库,然后切回ubuntu,---->>mysql -uroot -p 数据库名 < 备份文件路径/文件名

2.启动mysql服务--------------------->>-: sudo service mysql start

3.停止mysql服务--------------------->>-: sudo service mysql stop

4.重启mysql服务--------------------->>-: sudo service mysql restart

5.ubuntu的mysql默认登录信息--------->>-: 帐号: root
密码: mysql

6.连接mysql数据库------------------->>-: mysql -uroot -pmysql #-u:帐号; #-p:密码

7.查看mysql中都有那些数据库--------->>-: show databases;

8.查看当前使用的数据库-------------->>-: select databases();

9.使用XX数据库---------------------->>-: use xxx;

10.创建数据库----------------------->>-: create database 数据库名称 charset=utf8;

11.查看数据库的创建语句------------->>-: show create database 数据库名称;

12.删除数据库----------------------->>-: drop database 数据库名称;

13.退出mysql数据库的三种方法-------->>-: exit、puit、ctrl + d

14.查看mysql的配置文件-------------->>-: cd /etc/mysql/mysql.conf.d

15.查看mysql的log日志--------------->>-: cd /var/log/mysql/error.log

16.显示时间------------------------->>-: select now();

17.查看数据库版本------------------->>-: select version();

数据表:
1.查看当前数据库中所有表------------>>-: show tables;

2.查看表结构(desc)------------------>>-: desc 表名;

3.创建表(create)-------------------->>-: create table 表名(列参数);

4.修改表(添加字段)------------------>>-: alter table 表名 add 列名 类型 约束;

5.修改表(重命名修改字段)------------>>-: alter table 表名 change 原列名 新列名 类型 约束;

6.修改表(不重命名修改字段)---------->>-: alter table 表名 modify 列名 类型 约束;

7.修改表(删除字段)------------------>>-: alter table 表名 drop 列名;

8.删除表(drop)---------------------->>-: drop table 表名;

9.查看表的创建语句------------------>>-: show create table 表名;

10.向表内插入数据------------------->>-: insert into 表名 values;

11.查看表内所有数据----------------->>-: select * from 表名;

12.查看表内所有数据(完全写法)------->>-: select 数据库.表名.* from 表名;

13.修改表内数据(update)------------->>-: update 表名 set 列=值 where 判断条件;

14.物理删除(不可恢复)--------------->>-: delete from 表名 where id = ***;

15.逻辑删除(可恢复)----------------->>-: 跳到13步,将is_delete修改为1即可;

16.查看未被删除文件----------------->>-: select * from 表名 where is_delete = 0;

17.查看已被删除文件----------------->>-: select * from 表名 where is_delete = 1;

18.指定查询------------------------->>-: select 列名,列名,列名 from 表名;

19.去重(distinct)------------------->>-: select distinct 列名 from 表名;

20.条件查询------------------------->>-: select * from 表名 where 判断条件

21.关键字查询(模糊查询)(like)------->>-: select * from 表名 where 列名 like "%关键字%" #%表示任意字符可有可无

22.正则表达式查询(rlike)------------>>-: select * from 表名 where 列名 rlike "正则表达式"

23.范围查询(in)(和)----------------->>-: select * from 表名 where 列名 in (**,**) #只查满足括号内条件的

24.范围查询(between)(到)------------>>-: select * from 表名 where 列名 between 初始条件 and 结束条件

25.空判断(is null)------------------>>-: select * from 表名 where 列名 is null;

26.排序查询------------------------->>-: (升序) select * from 表名 order by 列名 asc;
(降序) select * from 表名 order by 列名 desc;

27.聚合函数(查询表内数据总数)--------->>-: select count(*) from 表名;
(查询某个列有多少)-------->>-: select count(列) from 表名;

28.查询最大值(max)------------------>>-: select max(列) from 表;

29.查询最小值(min)------------------>>-: select min(列) from 表;

30.求和(sum)------------------------>>-: select sum(列) from 表;

31.求平均值(avg)-------------------->>-: select avg(列) from 表;

32.四舍五入保留小数位数(round)------>>-: select round(列,保留小数位数) from 表;

33.分组查询(group by)--------------->>-: select 列,查询方法 from students group by gender;
例: select gender, count(*) from students group by gender;

34.组名+内容(显示查询结果)---------->>-: select 列, 内容列表名字(列) from students group by gender;

35.分组后再条件筛选(having)--------->>-: select 列, 内容列表名字(列) from students group by gender having 判断表达式

36.增加记录分组内容总和------------->>-: select 列, 内容列表名字(列) from students group by gender with rollup

37.设置分行查询--------------------->>-: select * from 表 where 判断条件 limit 起始行,终点行 公式: limit (n-1)*m,m

38.列表内连接查询(inner join + on)-->>-: select 表1.显示列,表2.显示列 from 表1 inner join 表2 on 表1.关联列 = 表2.关联列ID

39.列表左关联查询(lift join + on)--->>-: select * from 表1 left join 表2 on 表1.关联列 = 表2.id/

40.导入sql资源文件(source)---------->>-: source 路径/文件名

41.自关联查询----------------------->>-: 例:
select p.atitle,c.atitle from areas as p inner join areas as c on c.pid = p.aid where p.atital = "广东省"
显示省名 显示市名 表 名1 表 名2 查找表1

42.标量子查询语句------------------->>-: 例: 查询结果为《一行一列》
select * from students where heigh = (select max(heigh) from students);

43.列级子查询语句------------------->>-: 例: 查询结果为《一列多行》
select class_name from classes where classes.id in (select cla_id from students);

44.行级子查询语句------------------->>-: 例: 查询结果为《一行多列》
select * from students where (age,hergh) = (select max(age),max(hergh) from students);

45. 每种类型中最贵的(备份)--------->>-:
select a.name as "型号", b.name as "种类", c.name as "品牌", a.price as "价格" from goods as a inner join JDcate_name as b on a.cate_id = b.id inner join JDbrand as c on a.brand_id = c.id inner join (select cate_id as aa, max(price) as bb from goods group by aa) as d on d.aa = b.id and d.bb = a.price;

46.创建外键约束(1)------------------>>-: 先创建子表--->> foreign key(外键id) references 子表(id)

47.创建外键约束(2)------------------>>-: 先创建主表--->> alter table 主表 add foreign key (外键id) references 子表(id)

48.查找外键约束的名字--------------->>-: show create table 主表;

49.删除外键约束--------------------->>-: alter table 主表 drop foreign key 外键名称;

50.开始sql运行时间监测-------------->>-: set profiling = 1;

51.查看所有用户--------------------->>-: mysql> select host,user,authentication_string from user;


视图封装:
1. 创建视图封装--------------------->>-: create view v_需要封装的表名(视图名称) as select * from 需要封装的表名

2. 删除视图封装--------------------->>-: drop view 视图名称

事物操作:
1. 开启事物:------------------------>>-: begin;

2. 操作内容------------------------->>-: sql操作;

3. 提交事物------------------------->>-: commit;

4. 回滚事物------------------------->>-: rollback

索引操作:
1. 开启sql时间监测------------------>>-: set profiling = 1;

2. 创建索引------------------------->>-: create index title_**(#索引名字) on 表(title(*) #对应字段(长度,要和创建表时一样));
例: create index title_index on text_index(title(10))

3. 执行sql查询语句------------------>>-: select * from 表 where title = "条件"

4. 查询消耗时间--------------------->>-: show profiles;

5. 查询表中设置的索引--------------->>-: show index from 表;

6. 删除索引------------------------->>-: drop index 索引名称 on 表名;

===========================================================================================================================================
十五. Python操作MySql
===========================================================================================================================================

1. 导入模块------------------------->>-: from pymysql import *

def update():

1. 建立和数据库的连接对象----------->>-: conn = connect(host = "localhost", #localhose默认本机IP,如连接他人,需输入对方ip
user = "mysql帐号",
password = "mysql密码",
database = "数据库名字",
port = mysql端口,
charset = "utf8")

2. 获取数据库的操作对象------------->>-: cur = conn.cursor()

3. 编写sql操作语句------------------>>-: sql = "sql操作语句"

4. 通过3来执行4--------------------->>-: ret = cur.execute(sql)
print("受影响的行数为%s" % ret)

5. 如果是更新操作,那么执行此步------>>-: if ret != 0:
conn.commit() #提交
else:
conn.rollback() #回滚

6. 关闭操作对象--------------------->>-: cur.close()

7. 关闭连接对象--------------------->>-: conn.close()


def select():

1. 建立和数据库的连接对象----------->>-: conn = connect(host = "localhost", #localhose默认本机IP,如连接他人,需输入对方ip
user = "mysql帐号",
password = "mysql密码",
database = "数据库名字",
port = mysql端口,
charset = "utf8")

2. 获取数据库的操作对象------------->>-: cur = conn.cursor()

3. 编写sql操作语句------------------>>-: sql = "sql操作语句"

4. 通过3来执行4--------------------->>-: ret = cur.execute(sql)
print("受影响的行数为%s" % ret)
ret = cur.fetchone()/fetchall() #fetchone() 如果有数据,返回元祖. 如果没有,返回None
print(ret) #fetchall() 如果有数据,返回元祖嵌套,没有,返回空元祖()


5. 关闭操作对象--------------------->>-: cur.close()

6. 关闭连接对象--------------------->>-: conn.close()


防止sql注入bug:
1.操作语句中加%s站位

2.执行语句中加[实参],实参与站位一一对应 ret = cur.execute(sql,[实参])

3.主程序中加实参


===========================================================================================================================================
十六. WSGI
===========================================================================================================================================

已封装模块:
from wsgiref.simple_server import make_server


def application(environ, start_response):

start_response('200 OK', [('Content-Type', 'text/html')])

print('===', environ['PATH_INFO'])

body = r'<h1>Hello, %s!</h1>'%(environ['PATH_INFO'] or 'web')

return [body.encode('utf-8')]


# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('127.0.0.1', 8080, application)
print('正在监听HTTP的8080端口...')
httpd.serve_forever()


练习用Application:

def applitation(environ, start_response):
start_response("200 OK",[("Context-Type", "text/html"),
("Server", "PythonWebServer")])
return "Hello~"


===========================================================================================================================================
十七. 文件操作
===========================================================================================================================================
1. 打开文件------------------------->>-: with open("路径", "打开方式") as file
print(file.read())


===========================================================================================================================================
十八. argv(主程序头必写)
===========================================================================================================================================
1. 导入模块------------------------->>-: import sys

2. 主程序开头输入------------------->>-: if len(sys.argv) != 2 #设置终端输入参数的数量判断条件
print("判断条件数量不正确")
return
data = sys.argv[1]
if data.isdigit():
port = int(data)

3. 之后的程序可应用port进行传参


===========================================================================================================================================
十九. argv---->通过终端输入的方式导入模块
===========================================================================================================================================
1. 导入模块------------------------->>-: import sys

2. 将内容赋值给变量----------------->>-: mod_name_app_name = sys.argv[位置索引]

3. 将内容切分到列表----------------->>-: data_list = mod_name_app_name.split(":")

4. 判断内容数量是否符合------------->>-: if len(data_list) != 2

5. 将参数分别赋值给命名------------->>-: mod_name = data_list[0]
app_name = data_list[1]

6. 导入'字符串'模块----------------->>-: Application(模块名) = __import__(mod_name)
# Application(模块名) = __import__(mod_name) 等价于 import Application

7. 调用模块内的函数----------------->>-: app = getattr(Application, app_name)
# app = getattr(Application, app_name) 等价于 Appliction.app

8. 在__init__中创建self.app = app,以便传参

===========================================================================================================================================
二十. HTML+CSS
===========================================================================================================================================
HTML:
=======
1. 段落标签------------------------->>-: <p></p> #段落标签是个换行的标签,并且文字没有任何附加的效果,仅仅只是个文本

2. 页面布局标签(换行)--------------->>-: <div></div> #在页面布局的时候使用<div>标签,可以达到换行的效果,布局分块用,也叫块级标签

3. 页面布局标签(不换行)------------->>-: <span></span> #使用<span>标签,可以达到不换行的效果,不能设置宽和高,也叫内联/行内标签

4. 存放特殊效果的文字和小图片------->>-: <span></span> #<span>标签不但可以布局,还可以存放带有特殊效果的文字和小图片

5. 文本加粗------------------------->>-: <b><b> #它可以给文本设定加粗效果,无特殊含义,不换行

6. 文本倾斜------------------------->>-: <i></i> #它可以给文本设定倾斜效果,无特殊含义,不换行

7. 文本下划线----------------------->>-: <u></u> #它可以给文本添加下划线效果,无特殊含义,不换行

8. 文本删除线----------------------->>-: <s></s> #它可以给文本添加删除线效果,无特殊含义,不换行

9. strong--------------------------->>-: <strong></strong> #强调语义的加粗,不换行

10. em------------------------------>>-: <em></em> #强调语义的倾斜,不换行

11. ins----------------------------->>-: <ins></ins> #强调语义的下划线,不换行

12. del----------------------------->>-: <del></del> #强调语义的删除线,不换行

13. 页面中插入图片------------------>>-: <img src="图片名" title="图片备注" alt="备用显示">
#title: 当鼠标放到图片上时,鼠标旁边会显示title设定的文字,以便于给图片备注
#title: 可用于seo搜索关键词的存放
#alt: 当图片无法显示时,会显示alt的内容.
#alt: alt支持盲人读屏软件的读取

14. 插入超链接---------------------->>-: <a href="http://链接地址"/"路径" target>显示给用户看的链接按钮(文字/图片)</a>

15. 超链接占位---------------------->>-: <a href="###"></a>

16. 显示多个空格-------------------->>-: &nbsp;&nbsp;&nbsp....

17. 在网页中显示程序中的标签-------->>-: &lt...&gt

18. 插入换行------------------------>>-: <br>

19. 创建无序列表-------------------->>-: <ul>
<li>列表内容1</li>
<li>列表内容2</li>
...
</ul>

20. 创建有序列表-------------------->>-: <ol>
<li>列表内容1</li>
<li>列表内容2</li>
...
</ol>

21. 创建自定义列表(项目列表)-------->>-: <dl>
<dt>项目标题</dt>
<dd>项目内容</dd>
...
</dl>

CSS引用:
=========
CSS初始化模板:
---------------
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, 5b8b4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }


内链式:
--------
1. 搭建CSS运行环境------------------>>-: 在html的head中,回车插入<style></style>

2. 设置标签内容属性(颜色)----------->>-: 在style中加入属性键值对 <style>
标签{
color:red(颜色的英文)
}
</style>


外链式:
--------
1. 新建一个css文件

2. 编辑css文件内容,文件内容和内链式的<style></style>内容一样: 标签{
color:red
}

3. 在html程序中head中,回车插入css引用标签: <link rel="stylesheet" href="路径">

常用文字样式属性:
------------------

font(同时设置2-8)------------------->>-: font:是否加粗 是否倾斜 字号/行高 字体 #字号/行高 字体 -->这三个必须设置

1. 设置文字的颜色------------------->>-: color: ;

2. 设置文字加粗--------------------->>-: font-weight:bold;

3. 设置文字不加粗------------------->>-: font-weight:normal;

4. 设置文字的倾斜------------------->>-: font-style:italic;

5. 设置取消文字的倾斜--------------->>-: font-style:normal;

6. 设置文字的大小------------------->>-: font-size: ;

7. 设置行间距----------------------->>-: line-height:**px;

8. 设置文字的字体------------------->>-: font-family:'微软雅黑'(字体名字一般用英文);

9. 设置文字下划线------------------->>-: text-decoration:underline;

10. 设置取消文字下划线-------------->>-: text-decoration:none;

11.设置文字的删除线----------------->>-: text-decoration:line-through;

12.超链接的伪类--------------------->>-: 设置点击前的状态: ------------>>-: a:link{color:red};

设置点击时的状态: ------------>>-: a:active{color:red};

设置点击后的状态: ------------>>-: a:visited{color:blue};

设置鼠标滑过的状态: ---------->>-: a:hover{color:yellow};

实际开发写法------------------>>-: a{color:red};
a:hover{color:blue};

13.设置表单标签--------------------->>-: 表单通常用来制作登录,注册和页面的部分搜索,form叫表单域,form包含的标签叫表单控件

创建表单标签--------------------->>-: <form action="服务器提交地址" method="get(不加密)/post(加密)"></form>

文本框---------------------->>-: <input type="text" placeholder="默认显示内容">
valus="默认显示内容"

文本域---------------------->>-: <textarea></textarea>

css中设置文本域--------->>-: 禁用拖拽框大小----->>-: resize:none;

密码框---------------------->>-: <input type="password">

单选框---------------------->>-: <input type="radio" name="" checked>男 <input type="radio" name="">女
#name取相同值,即可实现单选
#checked在'男'选项这里,说明这个选项是默认选项(可设置默认,不写就行)

设置选框点击字也生效-------->>-: <input type="radio" name="" checked id=""><label for="">男</label>
#id和for取相同值即可

复选框---------------------->>-: <input type="checkbox">读书 <input type="checkbox" checked>听音乐
#默认

上传文件-------------------->>-: <input type="file">

下拉菜单-------------------->>-: <select>
<option>北京</option>
<option>上海</option>
<option selected>广州</option> #加了selected,所以默认选择广州
</select>

提交功能按钮---------------->>-: <input type="submit" value="按钮上显示的内容">

需要通过js绑定功能的按钮---->>-: <input type="button" value="按钮上显示的内容">

重置功能按钮---------------->>-: <input type="reset">

刷新页面按钮---------------->>-: <a href="javascript:location.reload();" class="button2">重置</a>

常用布局样式属性:
------------------
1. 设置布局宽度--------------------->>-: **px;

2. 设置布局高度--------------------->>-: height:**px;

3. 设置布局背景色------------------->>-: background:***(颜色英文单词);

设置布局背景图(平铺)--------->>-: background:url(相对路径/图片名);

设置布局背景图(不平铺)------->>-: background:url(相对路径/图片名) no-repeat **px **px; #后面的px可设置图片位置坐标
#定位在中间:px换成center

设置布局背景图(横向平铺)----->>-: background:url(相对路径/图片名) repeat-x;

设置布局背景图(纵向平铺)----->>-: background:url(相对路径/图片名) repeat-y;

设置布局背景图位置固定------->>-: background:url(相对路径/图片名) no-repeat fixed; #加个fixed就行.或者不写fixed,下加
background-attachment: fixed;

设置布局圆角----------------->>-: border-radius:**px/**%(最大50%);

单独设置背景图平铺方式------->>-: background-repeat: ;

单独设置背景图定位----------->>-: background-position: ;

设置布局背景图透明----------->>-: background:rgba(0,0,0,0.5(透明度)); 6 #0,0,0以黑色为底色,0.5是透明度,范围0-1之间小数


4. 设置布局边框(全体)--------------->>-: border:粗细(单位px) 颜色 样式; #样式包括: solid(实线)、dashed(虚线)、dotted(点线)

设置布局顶边边框------------->>-: border-top:粗细(单位px) 颜色 样式;

设置布局左边边框------------->>-: border-left:粗细(单位px) 颜色 样式;

设置布局右边边框------------->>-: border-right:粗细(单位px) 颜色 样式;

设置布局底边边框------------->>-: border-bottom:粗细(单位px) 颜色 样式;

10. 设置首行缩进--------------------->>-: text-indent: *em; #*em = *个字的宽度

11. 设置内间距----------------------->>-: padding:**px;

顶部距离--------------------->>-: padding-top:**px;

左侧距离--------------------->>-: padding-left:**px;

右侧距离--------------------->>-: padding-right:**px;

底部距离--------------------->>-: padding-bottom:**px;

四面八方距离----------------->>-: padding:**px **px **px **px; #三个值: 上 左右 下 两个值: 上下 左右;
上 右 下 左

设置内容位置变化不影响整体尺寸(设置内间距时不影响整体尺寸)--->>-: box-sizing:border-box;

12. 设置元素和外界的距离------------->>-: margin:**px;

顶部距离--------------------->>-: margin-top:**px;

左侧距离--------------------->>-: margin-left:**px;

右侧距离--------------------->>-: margin-right:**px;

底部距离--------------------->>-: margin-bottom:**px;

四面八方距离----------------->>-: margin:**px **px **px **px; #三个值: 上 左右 下 两个值: 上下 左右;
上 右 下 左

设置版心居中----------------->>-: margin:* auto;

设置内容超出父级隐藏(设置外间距时不影响父级位置和尺寸)------------->>-: overflow:hidden #放到父级中

13. 路径写法------------------------->>-: 1).当前文件所在位置包含的文件夹中--->>-: ./文件夹/文件

2).上一级位置所在文件夹中----------->>-: ../文件夹/文件

3).多级位置所在文件夹中------------->>-: ../../../文件夹/文件

14. 设置内容水平居中----------------->>-: text-align: center;

设置内容水平左对齐--------------->>-: text-align: left;

设置内容水平右对齐--------------->>-: text-align: right;

15. 设置内容垂直居中----------------->>-: line-height: 自身行高;

16. 实现元素类型之间的转换----------->>-: 块级转内联:------------------------------->>-: display: inline;

内联块(块级转内联并且宽和高设置生效):----->>-: display: inline-block;

内联转块级:------------------------------->>-: display: block;

隐藏(配合js)------------------------------>>-: display: none;

占位隐藏(配合js)-------------------------->>-: visibility: hidden;

标准流/文档流: 标签默认的元素类型.

17. 浮动----------------------------->>-: 让块级标签完美的没有间距的在一行共存,只要涉及块级一行共存,都用浮动.

无浮动--------------------->>-: float: none;

基准在左------------------->>-: float: left; #需要共存的元素都要加上这个

基准在右------------------->>-: float: right; #需要共存的元素都要加上这个

18. 清除浮动(清除浮动的影响)--------->>-: 1. 显示在最底层的标签添加 overflow:hidden;

2. 额外标签法------------->>-: 在所有浮动标签的下面添加<div class="clearFix"><div>
在css中设置.clearFix{clear:both;}

3. 伪类(伪元素)办法------->>-: css中设置: ↓↓↓
.clearfix::after{
content:"" #语法规定,必须有这个
display:block/table; #转元素类型为block(块级类型)
clear:both;
height:0; #设置一个默认高度为0
visibility:hidden; #设置让它占位隐藏
zoom:1; #解决IE6的兼容性
}
在子级的最后,也就是包含子级的元素div中添加clearfix:↓↓↓
<div class="con clearfix">

19. 定位: 可以控制让标签去页面的任何一个位置,包括两个标签压在一起;

相对定位:---------------------------->>-: position: relative; #需要配合位置偏移属性 top, bottom, left, right;
位置偏移属性: **px; #偏移方向的基准点是自己

绝对定位:---------------------------->>-: position: absolute; #可设置宽和高属性,默认宽高是自己;
位置偏移属性: **px; #偏移方向的基准点是浏览器左上角

改变偏移方向基准点--------------->>-: 把被当做基准的标签改成相对定位即可
#定位要领: 子绝父相

固定定位----------------------------->>-: position: fixed; #可设置宽和高属性,默认宽高是自己;
位置偏移属性: **px; #通过位置偏移属性设置固定显示位置的坐标;基准点是浏览器左上角
位置偏移属性: **px;

改变盒子的显示优先级----------------->>-: z-index:-10; #显示在下面

鼠标显示状态------------------------->>-: cursor: pointer; 显示鼠标手,

cursor: text; 显示鼠标文本;

cursor: move; 显示鼠标十字;

点击按钮时不显示按钮边框------------->>-: outline:none;


类选择器: **写前台基本都用这个
----------
1. 在css引用中创建类选择器---------->>-: .类选择器名字{color:red(颜色的英文)}

2. 设置对应要被修改的标签----------->>-: 例、<div class="类选择器名字><div>


ID选择器: **一个ID名在一个页面只能使用一次,一般预留给js配合程序去写页面的效果或者读取数据.
----------
1. 在css引用中创建ID选择器---------->>-: #ID选择器名字{color:red}

2. 设置对应要被修改的标签----------->>-: <div id="ID选择器名字"><div>


后代选择器(层级选择器):
------------------------
标签 标签{color: red}


组选择器(并集选择器):
----------------------
标签,标签,标签,标签...{color:red}


指定标签选择器:
----------------
标签.类{color:red}


伪元素选择器:
--------------
元素的开头添加内容------------------>>-: 元素::before{content:"内容"}

元素的结尾添加内容------------------>>-: 元素::after{content:"内容"}


===========================================================================================================================================
二十一. JavaScript
===========================================================================================================================================
1.创建JavaScript运行环境------------>>-: <script> #内联式用
window.onload = function(){JavaScript代码}
</script>;

2.引用js文件------------------------>>-: <script src="相对文件路径"></script>; #外链式用

3.行内式调用js---------------------->>-: <标签 事件=动作></标签> #必须用户有操作事件时,才会执行,所以此功能用的很少
事件:
onclick ------------->>-: 鼠标点击某个对象;
onmouseover --------->>-: 鼠标被移动到某元素上;
onmouseout ---------->>-: 鼠标从某元素移开;

ondblclick ---------->>-: 鼠标双击某个对象;
onabort ------------->>-: 图像加载被中断;
onblur -------------->>-: 元素失去焦点;
onchange ------------>>-: 用户改变域的内容;
onerror ------------->>-: 当加载文档或图像时发生某个错误;
onfocus ------------->>-: 元素获得焦点;
onkeydown ----------->>-: 某个键盘的键被按下;
onkeypress ---------->>-: 某个键盘的键被按下或按住;
onkeyup ------------->>-: 某个键盘的键被松开;
onload -------------->>-: 某个页面或图像被完成加载;
onmousedown --------->>-: 某个鼠标按键被按下;
onmousemove --------->>-: 鼠标被移动;
onmouseup ----------->>-: 某个鼠标按键被松开;
onreset ------------->>-: 重置按钮被点击;
onresize ------------>>-: 窗口或框架被调整尺寸;
onselect ------------>>-: 文本被选定;
onsubmit ------------>>-: 提交按钮被点击;
onunload ------------>>-: 用户退出页面;


4.js入口函数的作用:----------------->>-: 保证先有html和css,再运行js

5.js入口函数写法-------------------->>-: window.onload = function(){JavaScript代码} #js文件或运行环境中首先加这个

6.从整个网页文档中通过ID名查找元素-->>-: document.getElementById("id名");

7.Dom控制id名的css宽度-------------->>-: document.getElementById("id名").style.wigth = "500px";
#js添加的css都是行内式,所以优先级比较高
#带横线的键需要把横线去掉,变成驼峰式命名.例如 border-top 变成 borderTop

8.创建变量-------------------------->>-: var 变量名 = 内容;
#例、 var oMyp = document.getElementById("myp")
#变量名通常以变量类型的首字母+id名的驼峰方式来命名

9.Dom控制html的内容----------------->>-: document.getElementById("id名").innerHTML = "内容"

10.Dom控制html的属性---------------->>-: document.getElementById("id名").属性 = "内容"
#属性是什么就写什么,和html中一样.除了class,class应该写成className
#例、 document.getElementById("id名").href = "http://www.baidu.com"

11.查看数据类型--------------------->>-: typeof(要被查看的);

12.自定义函数----------------------->>-: function fn函数名(传参填这里){函数内容填这里}

13.调用自定义函数------------------->>-: fn函数名();

14.添加条件判断--------------------->>-: if (条件){条件成立执行的程序}
else if (条件){条件成立执行的程序}
else{以上条件都不满足,执行这个}

15.事件操作------------------------->>-: 事件源.事件类型 = function(){执行代码}

16.创建网页提示输出弹窗-------------->>-: alert("内容");

17.js中的与、或、非------------------>>-: ||(与), &&(或), !(非)

18.数组------------------------------>>-: 用来存储多个数据的容器

19.创建数组的两种方式---------------->>-: var array_1 = new Array(存储的数据,存储的数据,存储的数据);

var array_2 = [存储的数据,存储的数据,存储的数据] #[工作中常用]

20.数组的常用操作方法:

查看数组内所有数据--------------->>-: alert(数组名);

通过索引查数据------------------->>-: var 变量 = 数组名[索引];

统计数组内数据数量--------------->>-: var 变量 = 数组名.length;

数组分割成字符串----------------->>-: var 变量 = 数组名.join("分割符号");

在数组结尾追加数据--------------->>-: 数组名.push("内容");

删除数组中最后一个数据----------->>-: 数组名.pop();

删除并替换某些数据--------------->>-: 数组名.splice(位置,删除数量,添加谁);

删除某索引后的所有数据----------->>-: 数组名.splice(位置索引);

数组反转------------------------->>-: 数组名.reverse();

查数据第一次出现时的索引--------->>-: 数组名.indexOf(数据);

21.js的while循环写法----------------->>-: while(循环条件){循环内容};

22.js的for循环写法------------------->>-: for(初始值;条件;增量){循环内容};

23.js中字符串的常用操作方法:

转换成去掉小数的数值------------->>-: parseInt(字符串);

转换成保留小数的数值------------->>-: parseFloat(字符串);

以"-"分割成数组------------------>>-: 字符串.split("-");

切片----------------------------->>-: 字符串.substring(开始索引,结束索引);

从某索引开始切片----------------->>-: 字符串.substring(开始索引);

js的字符串反转------------------->>-: 字符串.split("").reverse().join("") #把字符串转为数组,然后反转,然后再转成字符串.

24.定时器:

1. 创建空定时器变量---->>-: var oTimer = null;

单次定时------------>>-: oTimer = setTimeout(执行的(匿名函数/自定义函数名),定时器的延迟时间(毫秒,1000毫秒 = 1秒))

多次循环定时-------->>-: oTimer = setInterval(执行的(匿名函数/自定义函数名),定时器的延迟时间(毫秒,1000毫秒 = 1秒))

2. 停止多次循环定时---->>-: clearInterval("oTimer");

oTimer = null;


===========================================================================================================================================
二十一. jQUery
===========================================================================================================================================
1.导入JQ文件------------------------->>-: <script src = "jq文件路径"></script>;

2.创建自己的script------------------->>-: <script></script>;

3.jQ入口函数(完整写法)--------------->>-: $(document).ready(function(){});

4.jQ入口函数(化简写法)--------------->>-: $(function(){});

5.选择一个要控制的标签--------------->>-: $("标签/#id名");
#设置选中标签点击按钮操作-------->>-: $("标签/#id名").click(function(){操作});

6.jQ的相关操作:

隐藏选定------------------------->>-: $("标签/#id名").hide(完成时间);

显示选定------------------------->>-: $("标签/#id名").show(完成时间);

隐藏和显示综合体----------------->>-: $("标签/#id名").toggle(完成时间);

鼠标滑过和鼠标离开综合体--------->>-: $("标签/#id名").hover(function(){经过时的代码}, function(){离开时的代码});

使用jQ控制css属性---------------->>-: 单个控制------>>-: $("标签/#id名").css("键","值");

多个控制------>>-: $("标签/#id名").css({"键":"值","键":"值"});

使用jQ访问css属性的值------------>>-: $("标签/#id名").css("键");

使用jQ控制html内容--------------->>-: $("标签/#id名").html("要改成的内容");

7.jQ的常用选择器:

选择第一个li标签----------------->>-: $("li:first").xxx("xxx"); /$("li").first().xxx("xxx");

选择最后一个li标签--------------->>-: $("li:last").xxx("xxx"); /$("li").last().xxx(xxx);

选择任意索引位置的li标签--------->>-: $("li").eq(标签所在位置索引).xxx("xxx");

选择指定标签前面的一个标签------->>-: $("标签").prev().xxx("xxx");

选择指定标签前面的所有标签------->>-: $("标签").prevAll().xxx("xxx");

选择指定标签后面的一个标签------->>-: $("标签").next().xxx("xxx");

选择指定标签后面的所有标签------->>-: $("标签").nextAll().xxx("xxx");

根据class选择标签---------------->>-: $(".名").nextAll().xxx("xxx");

根据id选择标签------------------->>-: $("#名").nextAll().xxx("xxx");

选择排除.box外的所有li标签------->>-: $("li").not(".box").xxx("xxx");

选择包含某标签的父级标签--------->>-: $("父级标签").has("标签").xxx("xxx");

选择父级标签中的某标签----------->>-: $("父级标签").find("标签").xxx("xxx");

选中属性=值得li标签-------------->>-: $("li[class=box]").xxx("xxx");

选择某标签的父级标签------------->>-: $("标签").parent().xxx("xxx");

选择自己的父级标签--------------->>-: $(this).parent().xxx("xxx");

选择自己的子级标签--------------->>-: $(this).children("要选择的子级").xxx("xxx");

选择自己的同级(兄弟)标签--------->>-: $(this).siblings().xxx("xxx"); #排他思想就是用siblings做的.

链式编程------------------------->>-: 同标签的连续不同操作,可用链式编程:例:
$(this).css("xxx").siblings("xxx");

给某个标签添加类名(class)-------->>-: $("标签").addClass("设置好属性的class名");

给某个标签删除类名(class)-------->>-: $("标签").removeClass("当前标签的class名(可不填)");

添加类名和删除类名的综合体------->>-: $("标签").toggleClass("class名");

查自己的索引值------------------->>-: $("标签").index();

8.自定义动画函数:

1.创建自定义动画函数------------->>-: #$("标签").animate(动画过程,完成时间,运动曲线,回调函数);

$("标签").animate({"width": "200px"},600,"linear",function(){动画完成后执行的内容});

动画过程制作-->>-: {k:v, k:v} #例如 {"width": "200px","height": "100px"};

运动曲线制作-->>-: 两个参数: 1.swing; 2.linear #通常用linear

回调函数------>>-: 指动画完成后要执行的函数.

原文地址:https://www.cnblogs.com/Dreamxin/p/8157341.html