【Python】积累与发现

Pip

Python包管理工具——Pip
更换pip源到国内镜像
Python 卸载一个第三方模块,并卸载其依赖包

Conda

Conda工具使用
remove命令和show命令的使用(场景conda删除channel )
uninstall anaconda

Python

Python命名规范
使用包setup.py安装
microsoft visual c++ 14.0 is required问题解决办法

Python中的classmethod和staticmethod的区别与应用
python-@staticmethod和@classmethod的作用与区别
python遍历类中所有成员的方法
python——时间与时间戳之间的转换
python中set集合如何决定是否重复?
Python正则表达式指南
lambda用法,:之前是接受参数,:之后是返回值
Python3.x和Python2.x的区别
jupytershortcut
Python Import详解
Python 中 import 的机制与实现
Python 绝对导入和相对导入详解
Python打印数组的全部元素
python单下划线/双下划线使用总结
and是逻辑运算,第一个为假的话就不必算完,&是位运算,必须算完
详解Python中的下划线,类中成员只要带了__就有效,类外方法和变量不遵守这个规则
python类特殊成员
Python的特殊属性和用法(全)
实习小记-python中可哈希对象是个啥?what is hashable object in python?
os._exit()vssys.exit()
Python中的闭包
Python闭包详解
Python进阶路线
python局部变量和全局变量global
列表合并
python中的列表解析和生成表达式
[Python]更加Pythonic的多个List合并
Python在函数中使用*和**接收元组和列表
Python异常处理
python之__iter__函数与__next__函数
python3自定义类:重写__eq__和__hash__函数
完全理解 Python 迭代对象、迭代器、生成器
python类的继承
Python: 你不知道的 super

class F1:
    def __init__(self, f1):
        self.f1 = f1
    def print_f1(self):
        print(self.f1)
class F2:
    def __init__(self, f2_1, f2_2):
        self.f2_1 = f2_1
        self.f2_2 = f2_2
    def print_f2(self):
        print(self.f2_1, self.f2_2)
class C(F1, F2):
    def __init__(self, c1, c2):
        super(C, self).__init__(c1)
        super(F1, self).__init__(c1, c2)
    def print_c(self):
        super(C, self).print_f1()
        super(C, self).print_f2()
if __name__ == "__main__":
    c = C(1, 2)
    c.print_c()

由Python的super()函数想到的
Python字符串格式化 (%占位操作符)
Python中的函数柯里化
Python 声明变量类型的三种方式
Python判断文件是否存在的三种方法
Python中单引号,双引号,3个单引号及3个双引号的区别
python assert的作用
Python中eval的强大与危害
python中文件复制操作
python修改linux中文件(文件夹)的权限属性

yield

Python yield 使用浅析
Python中的可迭代对象、迭代器和生成器的异同点
Python编程:生成器yield与yield from区别简单理解

# yield接收值, 协程
def gen():
    a = 0
    while True:
        x = yield a
        a = x
        print("x = %s" % x)
        print("a = %s" % a)
g = gen()
# 需要调用一个next才行,因为是生成器,所以要求代码跑到生成器函数的yield位置,才能去用send进行双向数据交互
print(next(g))  # 执行到yield, 激活协程 send(None) ”预激(prime)“协程,返回的就是a
g.send(10)
g.send(20)
g.send(30)
g.close()

Python并发编程之深入理解yield from语法(八)

字符集

Python: Getting rid of \u200b from a string using regular expressions
不可见字符的坑
python字符编码与解码——unicode、str和中文:UnicodeDecodeError:'ascii’codeccan’tdecode

协程

async标记异步函数,意思就是当这个函数内部出现等待的时候,CPU可以去执行其他的函数,而await后面要跟一个异步函数的调用,意思就是说,后面的函数是个异步函数,告诉cpu,我这个函数要等一段时间,你可以去干别的事儿了

《python高级编程》异步IO和协程
异步IO
Python异步IO之协程(一):从yield from到async的使用
Python Async/Await入门指南

结合B站的那个视频,就是上面第一个链接的关于协程的讲解进行理解,协程就是说,某个函数执行到某个位置的时候,这个函数可以先暂停等一会儿,然后让cpu这时候别闲着,去做点其他的事情,比如那个代码,taskio_1走到yield from相当于把taskIO_1挂起,然后执行taskIO_2,然后同样遇到yield from,开始又挂起来,然后taskIO_1挂起的位置返回,跳回taskIO_1继续执行,单个taskIO_1执行完,然后如果taskIO_2挂起的位置返回了,继续执行
所谓任务挂起就是执行到某一位置,暂停,然后把这个程序放在等待队列里面等着

Python中异步协程的使用方法介绍

初步理解await的功能,首先我发现,代码里最多只能同时跑一个loop,不能同时存在两个loop再跑,这个存疑,因为我原来是这样写的:先定义了一个coroutine,这个coroutine里会定义一个loop并且run,然后吧这个coroutine送给一个另一个loop并执行run,发现会报错,报错信息是,loop已经在running了,不能再次run,就是说同时只能有一个loop在run
下面代码实现的是开了两个request,这两个request之间是异步的,然后每个request里都是一个支持异步http访问的方法,由aiohttp提供,这里不能用requests,因为requests并没有异步的功能。async代表着这个是一个异步的方法,需要靠asyncio来启动,await就是yield from,这个对理解await很重要,yield from的功能别忘了,有两个:从yield方法里读取返回值,处理异常。await也是一样,从异步方法里获取返回值,并且处理异常,之前一直强调的yield方法就是一个执行到一半可以暂停的方法,异步的核心思路也是这个。而await就是这个暂停的地方(尽管他是yield from,但同理,yield from也有暂停的功能,可以看前面的博客理解),就是在生命,当await的在等待的时候,当前线程可以去执行其他异步程序。
下面的程序简单说明一下,比如两个request分别是requestA和requestB,刚开始requestA跑到第一个await,程序发现可以执行,然后进入到requestA中的get(,,0),然后在里面遇到了第二个await,然后requestA中的get(,,0)被挂起等待返回。这时候,requestB中的开始执行了,同样的跑到get(,,0),然后在里面遇到了第二个await,挂起,然后大家都挂起了,然后看谁返回了,就先继续执行谁。
博客中写道,loop就是一个消息队列,既然是队列,就应该是先入先出的,就是先返回的先执行。
不能用requests,因为requests并不支持异步访问奥

from flask import Flask
import time
app = Flask(__name__)
@app.route('/')
def index():
    time.sleep(1.5)
    return 'Hello!'
import asyncio
import aiohttp
import time
async def get(session, count, img_name, url='http://127.0.0.1:5000/'):
    print('getting Coroutine %d for %d' % (count, img_name))
    async with session.get(url) as response:
        result = await response.read()
    return result
async def request(connt):
    async with aiohttp.ClientSession() as session:
        for i in range(5):
            await get(session, connt, i)
        print('ddddd')
start = time.time()
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait([request(i) for i in range(2)]))
end = time.time()
print('Cost time:', end - start)

多线程

python–threading多线程总结
Python 多线程 start()和run()方法的区别(三)
Python线程指南

argparse

python argparse传入布尔参数false不生效
使用Python中的argparse从命令行接收boolean类型的参数

PyMysql

使用pymysql插入语句时对execute与executemany两个方法进行测速
Python3MySQL数据库连接
Python中操作mysql的pymysql模块详解

Numpy

numpy的广播(Broadcasting)
两个arr从最后一个axis开始对齐,不足的位置补充0

Scipy

优化

Python——使用scipy求解带约束的最优化问题

矩阵操作

numpy教程:numpy基本数据类型及多维数组元素存取

arr = np.arange(24).reshape((2,3,4))
# 先取第一维度的第1、2个元素,再第二维度的1、2、3个元素的方法,返回2*2*4的16个数
print(arr[[0,1],:,:][:,[1,2],:])
# 返回2*4的8个数
print(arr[[0,1],[1,2],:])

增加一个维度可以用下面两个方法,以np.expand_dims(arr,1)为例,意思就是在第二个位置插入一个维度,将第一个维度上存在的四个元素包起来成为一个新的轴

import numpy as np
arr = np.array([[1,2,3],[1,2,3]])
print(arr[np.newaxis,:,:].shape)
print(arr[:,np.newaxis,:].shape)

arr=np.array([[[1,2],[3,4],[5,6]],[[1.1,2.2],[3.3,4.4],[3.3,4.4]],[[1.1,2.2],[3.3,4.4],[3.3,4.4]],[[1.1,2.2],[3.3,4.4],[3.3,4.4]]])
print(arr.shape)  #(4, 3, 2)
new_arr=np.expand_dims(arr,1)
print(new_arr.shape) # (4, 1, 3, 2)
print(new_arr)

Numpy中stack(),hstack(),vstack()函数详解
文中箱子的含义只是帮助理解,但实际我觉得这个理解方式不是真正的含义,stack的意思是堆叠,对于两个形如(3,3,2)的array a,b,那么np.stack((a,b),axis=1)的含义是从二者的第1轴(从0算起)上取出元素进行堆叠,那么结果形状就应该是(3,2,3,2)。np.stack((a,b),axis=3)的含义是取出二者的第3轴上的元素进行堆叠,当然我知道是不存在第3轴,这个的含义就是对每个数进行堆叠,结果就应该是(3,3,2,2)
至于上面的博客评论区对有没有增加维度的争论,其实对于a或者b来讲,是增加了的;但对于(a,b)整体来讲,的确没有增加维度。

Python numpy.transpose 详解
transpose操作可以理解为移轴,例如一个数组A的形状是(4,5,6,7),如B=A.transpose((1,0,3,2)),那么A[1,2,3,:]就等于B[2,1,:,3]。具体的说明在tensorflow2的demo里也有记录

Matplotlib

画图

matplotlib绘制直方图、条形图和饼图
python 读取并显示图片的两种方法
Visualizing named colors matplotlib 颜色名
pylab与pyplot

在pycharm里用两个东西画出来的图不一样,用pylab画出来的类似一操作界面,可以放大缩小调整颜色之类的
在这里插入图片描述
pyplot.legend只显示一个字符的问题解决方法,在调用pyplot.legend()的时候,要指定参数名pyplot.legend(loc=‘upper right’),不可以只写pyplot.legend(‘upper right’),这样legend就不会只显示一个字符了,很弱智
matplotlib画布与坐标轴(figure and axes)
matplotlib绘图——再谈axes和pyplot方法

配置

matplotlib backend
%matplotlibinlineon/off
linux 服务器没有GUI时如何使用matplotlib绘图

字体

Python画图matplotlib展示图中中文乱码
mac下python matplotlib中文乱码解决方案
Matplotlib中文乱码的3种解决方案
matplotlib显示宋体和Times New Roman
如何将matplotlib中全局的中文设置成宋体

Pandas

CRUD

十分钟入门 Pandas
理解index和col 无非就是两边的title,数据类型都是index的,以堆叠(Stack)这一小节为例

                     A         B
first second                    
bar   one     0.029399 -0.542108
      two     0.282696 -0.087302
baz   one    -1.575170  1.771208
      two     0.816482  1.100230

上面的数据里,列(称为column)就是[A,B],是Index类型的,索引(称为index)是[(bar,one),(bar,two)…],是一个MultiIndex类型的
其实无所谓column还是index,类型要么是Index要么是MultiIndex,我觉得称之为行键和列键更合理,两者实际上没有任何差别,就是作为行和列的键,帮助定位数据,上述数据可以使用
df.loc[[('bar', 'one'),('bar', 'two')], ['A','B']]来定位数据

也可以随意修改列键,例如

df = pd.DataFrame(np.random.randint(3,size=(4, 3)), index = ['apples','apples','oranges','oranges'], columns=['A','B','C'])
df_grouped = df.groupby(df.index).agg({'A':['sum','mean'],'B':'sum','C':'sum'})
df_grouped.columns = ['_'.join(col) for col in df_grouped.columns.values]

使用Pandas实现SQL基本操作
Pandas教程 | 超好用的Groupby用法详解
Pandas提取含有指定字符串的行(完全匹配,部分匹配)
python——修改Dataframe列名的两种方法
DataFrame 新增列的五种方法
Pandas Merging 101
left_index=True, right_on='keyRight'的含义就是左表使用index作为join的key,右表使用keyRight列作为join的key

Pandas的Apply函数——Pandas中最好用的函数

特性

pandas中关于set_index和reset_index的用法
就是把索引变成列,level可以是一个[1,2]的列表,代表着取第几层的index

统计

Pandas-排序函数sort_values()

pandas的dataframe 条件查询
pandas 数据索引与选取
Python Pandas修改列类型
Python dataframe.pivot()用法解析
python pandas库——pivot使用心得
pandas中DataFrame的stack()、unstack()和pivot()方法的对比

配置

pandas中关于DataFrame行,列显示不完全(省略)的解决办法

Jupyter

远程访问jupyter notebook
jupyter开启远程访问以及遇到No address associated with hostname问题

Scikit-learn

【原】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
使用sklearn进行增量学习

absl

这个东西就是一个参数处理模块,可以让你python main.py --arg 5这样运行python文件
Python中的import以及__future__和absl的flags使用

其中mark_flag_as_required就是某个参数是强制要求输入的,不输入就有user warning,尽管定义了默认值= =

  • 从另一个文件里引入flag的第一种方法
    下面这个函数中flag_source是一个module,作用就是把这个module里定义的flag引入到当前这个文件里,免得多次定义
flags.adopt_module_key_flags(flag_source)
#下面的文件叫flag_source.py
from absl import flags
flags.DEFINE_string(name="my_flag", default="abc", help="a flag.")
flags.DEFINE_string(name="my_flag222", default="abc", help="a flag.222")
#下面的文件叫my_module.py
from absl import app as absl_app
from absl import flags
from flag_test import flag_source
flags.adopt_module_key_flags(flag_source)
def main(_):
    print(flags.FLAGS.my_flag)
    pass
absl_app.run(main)
#不过参数只对run()内的函数有效,下面一行啥也打印不出来
print(flags.FLAGS.my_flag)
  • 另一种从另一个文件里引入flag的方法就是用declare_key_flag
#下面的文件叫flag_source.py
from absl import flags
def get_flags():
    key_flags = []
    flags.DEFINE_string(
        name="data_dir", short_name="dd", default="/tmp",
        help="The location of the input data.")
    key_flags.append("data_dir")
    return key_flags
#下面的文件叫my_module.py
from absl import app as absl_app
from absl import flags
from flag_test import flag_source
def main(_):
    flags.declare_key_flag(flag_source.get_flags()[0])
    print(flags.FLAGS)
    pass
absl_app.run(main)
  • 参数校验,如果给pal_flag的参数不满足下面的check_pal返回true,那么就会报错
flags.DEFINE_string(name="pal_flag", short_name="pf", default="", help="Give me a palindrome")

@flags.validator("pal_flag")
def _check_pal(provided_pal_flag):
  return provided_pal_flag == provided_pal_flag[::-1]
FLAGS = flags.FLAGS
def main(argv=()):
	print(FLAGS.pal_flag)
app.run(main)

下面flags_dict是个字典,key就是benchmark_logger_type和benchmark_log_dir

@flags.multi_flags_validator(
      ["benchmark_logger_type", "benchmark_log_dir"],
      message="--benchmark_logger_type=BenchmarkFileLogger will require "
              "--benchmark_log_dir being set")
def _check_benchmark_log_dir(flags_dict):
  	pass
  • define_enum和define_list的用法
    enum表明的是,接受的参数一定在后面那个list里
flags.DEFINE_enum('enum','123',['123','342'],help='no')
flags.DEFINE_list('l',[1,2,3],help='no')
def main(_):
    flags.FLAGS.set_default('data_dir','asdfsadf')
    print(flags.FLAGS.enum)
    print(flags.FLAGS.l)
    pass
absl_app.run(main)

Pillow

深入学习图像处理——图像相似度算法

Opencv

应用OpenCV和Python进行SIFT、SURF、ORB算法的实现

knnMatch的返回值是一个列表,每个元素也是一个列表,这个列表的元素个数由k决定,就是找几个最近的描述子,DMatch的成员变量可以去Opencv的api里取找

subprocess

Python subprocess模块功能与常见用法实例详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值