-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpython.txt
247 lines (198 loc) · 12.1 KB
/
python.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
1.mac的python在/usr/bin/python默认为2.7
查看whereis python
py文件utf-8声明:
#-*- coding:utf-8 -*-
2.mac安装python3
官网下载python3的dmg,双击安装即可,安装完成路径为/usr/local/bin/python3
在终端运行>python3,即可使用python3
3.连接mysql(python驱动模块)
MySQL-python又叫 MySQLdb,是 Python 连接 MySQL 最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持 Python2.x,
前置条件
sudo apt-get install python-dev libmysqlclient-dev # Ubuntu
sudo yum install python-devel mysql-devel # Red Hat / CentOS
# 安装
pip install MySQL-python;
PyMySQL 是纯 Python 实现的驱动,速度上比不上 MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容 MySQL-python,
pip install PyMySQL
# 为了兼容mysqldb,只需要加入;
peewee
pip install peewee;
SQLAlchemy
如果想找一种既支持原生 SQL,又支持ORM的工具,那么SQLAlchemy是最好的选择,它非常接近 Java 中的 Hibernate 框架。
4.连接池
DBUtils
pip install DBUtils
两种模式:
1.为每一个线程创建一个链接,即使线程即使调用了close()方法,也不会关闭,只是把线程放到连接池,供自己再次使用,当连接关闭时,线程连接自动关闭。
from DBUtils.PersistentDB import PersistentDB
import pymysql
PooL = PersistentDB(
creator = pymysql, #使用链接数据库的模块
maxusage = None, #一个链接最多被使用的次数,None表示无限制
setsession = [], #开始会话前执行的命令
ping = 0, #ping MySQL服务端,检查服务是否可用
closeable = False, #conn.close()实际上被忽略,供下次使用,直到线程关闭,自动关闭链接,而等于True时,conn.close()真的被关闭
threadlocal = None, # 本线程独享值的对象,用于保存链接对象
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '123',
database = 'ok1',
charset = 'utf8'
)
2.创建一批连接到连接池,供所有线程共享使用
import pymysql
from DBUtils.PooledDB import PooledDB
POOL = PooledDB(
creator = pymysql, #使用链接数据库的模块
maxconnections = 6, #连接池允许的最大连接数,0和None表示没有限制
mincached = 2, #初始化时,连接池至少创建的空闲的连接,0表示不创建
maxcached = 5, #连接池空闲的最多连接数,0和None表示没有限制
maxshared = 3, #连接池中最多共享的连接数量,0和None表示全部共享,ps:其实并没有什么用,因为pymsql和MySQLDB等模块中的threadsafety都为1,所有值无论设置多少,_maxcahed永远为0,所以永远是所有链接共享
blocking = True, #链接池中如果没有可用共享连接后,是否阻塞等待,True表示等待,False表示不等待然后报错
setsession = [],#开始会话前执行的命令列表
ping = 0,#ping Mysql 服务端,检查服务是否可用
host = '127.0.0.1',
port = 3306,
user = 'root',
password = '123',
database = 'ok1',
charset = 'utf8'
)
传递如下参数:
creator: 可以生成 DB-API 2 连接的任何函数或 DB-API 2 兼容的数据库连接模块。
mincached : 启动时开启的空连接数量(缺省值 0 意味着开始时不创建连接)
maxcached: 连接池使用的最多连接数量(缺省值 0 代表不限制连接池大小)
maxshared: 最大允许的共享连接数量(缺省值 0 代表所有连接都是专用的)如果达到了最大数量,被请求为共享的连接将会被共享使用。
maxconnections: 最大允许连接数量(缺省值 0 代表不限制)
blocking: 设置在达到最大数量时的行为(缺省值 0 或 False 代表返回一个错误;其他代表阻塞直到连接数减少)
maxusage: 单个连接的最大允许复用次数(缺省值 0 或 False 代表不限制的复用)。当达到最大数值时,连接会自动重新连接(关闭和重新打开)
setsession: 一个可选的SQL命令列表用于准备每个会话,如 ["set datestyle to german", ...]
creator 函数或可以生成连接的函数可以接受这里传入的其他参数,例如主机名、数据库、用户名、密码等。你还可以选择传入creator函数的其他参数,允许失败重连和负载均衡。
请注意连接可以与其他线程共享,只要你设置 maxshared 参数为非零,并且DB-API 2模块也允许。如果你想要使用专用连接则使用:
db = pool.connection(0)
-------关于pymysql模块,如果没有单线程的情况,连接MySQL数据库没有问题,但如果要是多线程,就需要加锁,一旦加锁,后面的线程就得等待,势必会降低使用效率。
5.JayDeBeApi
JayDeBeApi是一个python模块,可是通过它来使用java的JDBC来连接数据库。
pip install JayDeBeApi
dirver='com.mysql.jdbc.Driver'
conn=jaydebeapi.connect('com.mysql.jdbc.Driver',['jdbc:mysql://localhost:3306/test','root','password'],'/data/users/huser/lan/codes/useJPype/mysql-connector-java-5.1.36/mysql-connector-java-5.1.36-bin.jar')
curs=conn.cursor()
curs.execute('create table CUSTOMER("ID" INTEGER not null primary key,"NAME" varchar not null)')
curs.fetchall()
#jaydebeapi.connect(dirver,[url,User,Pwd],jarFile)
6.python下载离线包
pip download ipython
pip download -d . ipython (-d后面加要下载到的目录)
pip download -r requirement.txt (-r从给定的需求文件下载,requirement.txt里写入你要下载的包)
安装离线包:
pip install --no-index --find-links="./" ipython
pip install --no-index --find-links="./" -r requirements.txt(将要安装的包名写在requirements.txt中)
删除:
pip uninstall ipython
7.pyodbc
安装
pip install pyodbc
会出现没有<sql.h>
Mac: brew install unixodbc
brew install freetds--with-unixodbc(安装freetds)
Linux: sudo apt-get install unixodbc-dev
没找到 python.c,执行:
brew install python-devel
yum install python-devel
连接mysql需要安装mysql odbc
8.替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
9.pip更换源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow(使用清华的源安装tensorflow)
10.安装gunicorn
pip download gunicorn
pip install --no-index --find-links="./" gunicorn
screen gunicorn -w 4 -b 127.0.0.1:5000 flask_main:app #flask_main文件名, 即flask_main.py, app是应用名字,即app.run();
11.python GIL
GIL的全称为Global Interpreter Lock,全局解释器锁。
为了利用多核,Python开始支持多线程。而解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁。 于是有了GIL这把超级大锁,而当越来越多的代码库开发者接受了这种设定后,他们开始大量依赖这种特性.
python使用引用计数做垃圾回收,为了解决这个问题,就引入了GIL,保证对虚拟机内部共享资源的互斥性(mutex),每一时刻只有一个线程工作。
12.*args,Python允许我们制定一些参数并且通过args捕获其他所有剩余的未被捕捉的位置参数
**kwargs来表明,所有未被捕获的关键字参数都应该存储在kwargs的字典中
12.numpy使用
import numpy as np
创建矩阵
A = np.mat([1,2,3],[3,4,5]) #2*3的矩阵
np.zeros((3,4)) #创建3*4全零二维数组
np.ones((2,3,4)) # 创建2*3*4全1三维数组
np.empty((2,3)) # 创建2*3的未初始化二维数组
np.eye(5,k=0) #5*5 对角矩阵,k调节1向上偏离
np.identity(5) #只能创建方形矩阵
np.dot(A,B) # 矩阵乘法
.T -- 返回自身的转置
.H -- 返回自身的共轭转置
求逆:.I
a = A.I
.I可以求广义逆,但无法求奇异方阵的逆
验证广义逆:A*a*A=A,a*A*a=a,A*a与a*A为对称矩阵,满足1,2的为广义自反逆,满足4个条件的为穆尔彭罗斯伪逆记A+。
np.linalg.pinv(A)可求任意广义逆
np.cov(x,y) #计算协方差矩阵
np.corrcoef(x,y) #相关系数
行列式:
np.linalg.det(d) #d必须为方阵,无法计算广义行列式
向量的范数:
np.linalg.norm(a,ord=0)# 0-范数,表示向量中非零元素的个数
np.linalg.norm(a, ord = 1) #1-范数,计算方式为向量所有元素的绝对值之和
np.linalg.norm(a, ord = 2) #2-范数,计算方式跟欧式距离的方式一致即向量各元素的平方和然后求平方根
np.linalg.norm(x, ord = np.inf) #+∞ -范数,所有向量元素绝对值中的最大值
np.linalg.norm(x, ord = -np.inf) #−∞ -范数,所有向量元素绝对值中的最小值
矩阵范数:
np.linalg.norm(x, ord = 1) #1-范数,又名列和范数。顾名思义,即矩阵列向量中绝对值之和的最大值
np.linalg.norm(x, ord = 2) #2-范数,又名谱范数,计算方法为ATA矩阵的最大特征值的开平方
np.linalg.norm(x, ord = 'fro') #F-范数,Frobenius范数,计算方式为矩阵元素的绝对值的平方和再开方
ninf = np.linalg.norm(x, ord = np.inf) #∞ -范数,又名行和范数, 即矩阵行向量中绝对值之和的最大值。
13. 爬虫
BeautifulSoup4
是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。
pip install BeautifulSoup4
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text,'html.parser');
安装解析器:
html.parser是自带的
lxml,pip install lxml
Html5lib,pip install html5lib
soup.select(selector);可以像css那样使用选择器查html元素,返回的结果是数组
soup.find_all("a",class_="xxx")
requests:
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多
因为是第三方库,所以使用前需要安装.
pip install requests
import requests
response = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头信息
print(response.cookies) # 打印cookie信息
print(response.text) #以文本形式打印网页源码
print(response.content) #以字节流形式打印
14.scrapy
Pip install scrap
15.常量池
小整数常量池: -5 -- 257
16.Python的垃圾回收
Python中的垃圾回收是以引用计数为主,标记-清除、分代收集为辅。引用计数的缺陷是循环引用的问题。
标记清除(Mark—Sweep),它分为两个阶段:第一阶段是标记阶段,GC会把所有的『活动对象』打上标记,第二阶段是把那些没有标记的对象『非活动对象』进行回收。
Python将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,Python将内存分为了3“代”,分别为年轻代(第0代)、中年代(第1代)、老年代(第2代),他们对应的是3个链表,它们的垃圾收集频率与对象的存活时间的增大而减小。新创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。同时,分代回收是建立在标记清除技术基础之上。
17.miniconda
https://docs.conda.io/en/latest/miniconda.html
在pycharm创建项目时,下面的project interpreter可以选择Conda环境。
可能报错:An HTTP error occurred when trying to retrieve this URL...If your current network has https://www.anaconda.com blocked
解决:
添加清华源:
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
在C:\Users\用户名 目录下修改配置文件 .condarc,将 -defaults 这一行删掉即可。
18.Anaconda
https://docs.anaconda.com/anaconda/install/windows/