![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 52
python
HWQlet
这个作者很懒,什么都没留下…
展开
-
requests库开发中常用的方法
requests.get# r是response对象r = requests.get('www.baidu.com')load = {'ie':'UTF-8', 'wd'='xxx'}# 下面这种会在网址栏变成www.baidu.com?ie=UTF-8&wd=xxxr = requests.get('www.baidu.com', params=load)print(r.url) # 打印实际组装的完整urlload2 = {'ie':'UTF-8', 'wd'=['xxx', '原创 2021-03-18 11:05:40 · 262 阅读 · 0 评论 -
pyenv的基础使用方法
博主的文章链接:原文链接先安装crul和gitsudo apt-get install curl git-core安装pyenvcurl https://raw.github.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash添加pyenv到环境变量vim ~/.bashrc export PYENV_ROOT="${HOME}/.pyenv"if [ -d "${PYENV_ROOT}" ]; then转载 2020-11-25 11:44:29 · 284 阅读 · 0 评论 -
python的ORM框架sqlalchemy的使用
参考链接:链接转载 2020-10-28 11:18:46 · 119 阅读 · 0 评论 -
使用pyenv和virtualenv搭建虚拟环境
转载链接原文章转载 2020-10-28 09:03:15 · 118 阅读 · 0 评论 -
python中字典的实现
python字典是使用哈希表实现的。它是一个数组,其索引是使用键上的哈希函数获得的。哈希函数的目标是将键均匀分贝在数组中。假设我们用字符串作为键,哈希函数可以定义成下面这种:arguments: string objectreturns: hashfunction string_hash: if hash cached: return it set len to string's length initialize var p pointing to原创 2020-06-05 22:00:49 · 691 阅读 · 0 评论 -
python中字符串对象的实现
C中的字符串是一个以'\0'结尾的字符数组python中的字符串对象有内部的PyStringObject表示。结构:typedef struct{ PyObject_VAR_HEAD; long ob_shash; int ob_sstate; char ob_sval[1];}PyStringObject;其中ob_shash是字符串的哈希,ob_sval包含大小为ob_size的字符串,以'\0'终止,ob_sval初始大小为1字节ob_sva原创 2020-06-05 14:27:30 · 264 阅读 · 0 评论 -
python中Integer对象的实现
我们知道,python中的整数有一些特点:无大小限制,也就是说不像Java,C++会有溢出的情况,当然python也会溢出,这和你的内存大小有关系 存储正/负数底层虽然是用补码,但是显示出来却是:bin(-3)='-0b11',很捞Cpython中integer是怎么实现的呢?PyIntObject结构:typedef struct{ PyObject_HEAD; long ob_ival;}PyIntObject;为了避免每次需要一个新的整数对象时都分配一个新整数原创 2020-06-05 13:41:56 · 2644 阅读 · 0 评论 -
python异步--aiohttp
requests大家应该都不陌生是,urllib和urllib2的改进版,我们做爬虫的时候经常要用到这个第三方库来请求网页并且获取网页内容但是requests的方法有个不好的就是不能等待,也就是说无法放在await后面,因此无法使用requests库在协程程序中实现请求因此就出现了aiohttp用来实现异步网页请求,可以理解为异步版本的requests基本用法官方推荐使用ClientSession()函数来调用网页请求等相关方法首先,我们在协程中使用ClientSession()的get原创 2020-05-26 21:25:11 · 1660 阅读 · 1 评论 -
函数式编程
函数式编程的三大特性:immutable data 不可变数据:像Clojure一样,默认上变量是不可变的,如果你要改变变量,你需要把变量copy出去修改。这样一来,可以让你的程序少很多Bug。因为,程序中的状态不好维护,在并发的时候更不好维护。(你可以试想一下如果你的程序有个复杂的状态,当以后别人改你代码的时候,是很容易出bug的,在并行中这样的问题就更多了) first class functions:这个技术可以让你的函数就像变量一样来使用。也就是说,你的函数可以像变量一样被创建,修改,并.原创 2020-05-25 13:00:20 · 222 阅读 · 0 评论 -
python存储负数和C++的一些区别
先看些例子:a = bin(-3)print(a) a = bin(3)print(a) b = bin(-3 & 0xffffffff)print(b) c = bin(0xfffffffd)print(c) # 输出# -0b11# 0b11# 0b11111111111111111111111111111101# 0b11111111111111111111111111111101所以说:Python 中的整型是补码形式存储的 Python 中.原创 2020-05-24 21:42:40 · 343 阅读 · 0 评论 -
python异步--asyncio
在python2.x和python3.x早期版本的时候,协程的主流实现方法是gevent,这个我之前讲过asyncio在python3.4后内置在python中了,在后面还有async/await,更后面有aiohttp,flask实现就有参照aiohttpasync和await分别又来替换早期协程的asyncio.coroutine和yield from。从此以后,协程就是python中一个新的语法,而不是与生成器混为一谈了事件循环和协程的引入,可以极大提高高负载下程序的IO能力asy原创 2020-05-23 22:15:20 · 494 阅读 · 0 评论 -
python异步--gevent深入学习
gevent是基于libev的并发库,它为各种并发和网络相关的任务提供了整洁的API异步可以说是解决高并发程序的最高效的方法,多线程/多进程的切换开销巨大,特别是在很多线程进程的情况下greenlet在gevent总用到的主要模式是greenlet,是一种轻量级协程,通过C扩展模块接入python,greenlets(注意加了s代表很多)全部运行在主程序所在的进程中,被协作式的调度因为终究是单线程的,所以任何时刻只有一个协程在运行而multiprocess和threading可以真正原创 2020-05-22 13:17:18 · 867 阅读 · 0 评论 -
python协程实现--yield,yield from,greenlet,gevent
之前有讲过协程,协程就是在一个线程里面实现并发。注意和return区分开就好理解了通俗的讲,协程在yield之后会保存当前代码的运行状态,切换到send处专业的讲:协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。协程能够实现异步IO协程评价优点:原创 2020-05-22 09:43:02 · 317 阅读 · 0 评论 -
python--5种网络IO模型
IO有5种模型:上次没有讲详细,这次好好学习一下总的来说,计算机基础课程学的扎实,这些可能还没接触,但是学到了就能懂(一种计算机的思维?),基础课还是很重要的啊 blocking IO:阻塞IO nonblocking IO:非阻塞IO,有的说法是非阻塞IO就是异步IO,但还是区分一下,因为是Linux的网络IO IO multiplexing:IO复用 signal driven IO:信号驱动IO:比较少用,不讨论 asynchronous IO:异...原创 2020-05-21 23:52:47 · 310 阅读 · 0 评论 -
python分布式进程--managers
多任务实现方法可以是:多线程,多进程,异步IO(python中的协程)--通过单线程或者单进程实现多任务多任务的任务类型:计算密集型,IO密集型计算密集型:并行才能根本提高速度,并行数最好是机器核数,过多的线程或者进程反而降低了效率,因为要切换。另外用速度快的语言最好,如C语言IO密集型:因为IO与cpu的速度差距太大,导致大部分时间都是在等待IO的过程,要尽量把等待的时间做有效的工作,所以并发量可以很大,但是也不能无限大,得有个限度,因为内存有限。这种类型的任务尽量用代码量少的来写,因为语言速原创 2020-05-20 23:08:11 · 178 阅读 · 0 评论 -
python怎么批量复制文件--shutil
如果用write,read这些会很麻烦,主要是代码很麻烦python自带一个shutil库,可以像Linux中一样批量操作文件mv,cp(移动复制文件)普通的os模块只能进行路径的拼接那些的import osimport sysimport shutilsource_folder = r'C:\Users\ads\Desktop\中国软件杯比赛--交通场景识别\JPEGImages'dst_folder = r'C:\Users\ads\Desktop\中国软件杯比赛--交通场景识别\原创 2020-05-20 12:00:08 · 1236 阅读 · 0 评论 -
python中dict,set,tuple底层实现原理
源码可以在点这里:链接list的底层实现我已经介绍过了。和我想的类似,里面的元素就是指针最近看了看redis的数据类型的底层实现代码,发现也是用C写的,里面的很多实现真的和python中的实现很类似果然大佬的思想都是这么强,英雄所见略同哈哈list和tuple很大的区别就是一个可变一个不可变,可变和不可变的概念我也不介绍了,大家可以自行baidu,简单来说可变就是该地址处的值可以改变,不可变则反之list被实现为长度可变的数组,每次都会分配略大的内存防止频繁的申请分配内存,连续的一.原创 2020-05-19 16:15:20 · 982 阅读 · 0 评论 -
python中经典类和新式类,super方法的理解
什么是经典类和新式类经典类:是python2.2之前的,到了python2.7依旧支持,python3.x之后只支持新式类了新式类:从python2.2之后至今都在使用,现在默认都是新式类新式类比经典类有什么优点:原因在于经典类在类多重继承的时候是采用从左到右深度优先原则匹配方法的,而新式类是采用C3算法(不同于广度优先)进行匹配的,经典类最容易出现的就是子类越过父类的方法在多重继承中,我们可以测试一下搜索成员的顺序:新式类的经典类的继承:class A: d.原创 2020-05-13 13:28:16 · 305 阅读 · 0 评论 -
python种List的底层实现
我们都知道我们用的python一般都是Cpython,就是说底层是C语言写的List对象的结构typedef struct { Pyobject_VAR_HEAD; Pyobject **ob_item; Py_ssize_t allocated;}PyListObject;我们可以看到里面的元素是二级指针,list名是一级指针,里面的元素也是指针,也就是说list中的元素其实是一个个的指针,指针指向真正的数据这也就是为什么python的list可以添加任意类型的原创 2020-05-11 16:44:34 · 477 阅读 · 0 评论 -
python中@staticmethod和@classmethod
python中有三种方法,静态方法,类方法,实例方法def foo(x): print "executing foo(%s)"%(x)# object是为了让代码有兼容python2.xclass A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): print "executing原创 2020-05-10 23:52:01 · 255 阅读 · 0 评论 -
python生成器的深入理解,与协程的关系,send的理解
我们知道生成器有两种形式:1.(x for _ in range(10))也就是列表生成式改成( )而不是[ ]2.用了yield的函数协程是什么:协程又称微线程,纤程,python中协程是通过生成器来支持的子程序或者称为函数,子程序的互相调用会形成调用栈,需要一层层返回,子程序是默认return None的,也就是返回了函数就结束了,下次执行又是从头开始协程有什么好处:协程可...原创 2020-05-01 08:57:42 · 232 阅读 · 0 评论 -
阻塞式回调函数和延迟式回调函数
首先,有三种函数:起始函数:大致可以等同于主函数中间函数:中间函数把回调函数作为参数传递执行回调函数:一个有独立功能的函数怎么理解:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做 触...原创 2020-04-30 18:16:57 · 3578 阅读 · 0 评论 -
python实现进度条
有多个任务的时候,有的时候我们需要看到进度条,才不会让我们的耐心耗尽,并且能够做到更好的用户体验可以用tqdmimport tqdmimport timeimport randomdef proc1(sec): time.sleep(sec)def proc2(sec): time.sleep(sec)def proc3(sec): time.s...原创 2020-04-28 23:06:54 · 243 阅读 · 0 评论 -
python中nonlocal和global的用法
nonlocal:是用在函数里面嵌套函数的情况,也就是闭包global:在函数里面对一个变量声明前加global,表示这个变量是来自于全局存储空间的变量直接上例子比较形象:1.没有用nonlocal和globala = 0def out(): a = 1 def inner(): a = 2 print("inner a:", a...原创 2020-04-26 19:35:16 · 544 阅读 · 0 评论 -
python--GIL全局解释器锁以及为什么无法实现真正的多线程
python中的多线程并没有实现真正的多线程,也就是多线程并行执行其原因就在于全局解释器锁--GILpython代码的执行需要python虚拟机(解释器)来控制,虽然允许多个线程在解释器中,但是GIL一次只允许一个线程执行,有点像单处理机电脑,虽然内存中存在很多进程,但是一次只能有一个进程占用处理器python解释器和GIL怎么配合工作:1.设置GIL。2.切换到一个线程去执行。...原创 2020-04-20 18:37:08 · 451 阅读 · 0 评论 -
python--在for中删除列表元素为什么不好使
先看如下图:这是因为循环次数在一开始就已经确定了,所以数组删除掉元素后长度变短了,但是要循环的次数还是6次,所以就越界了,我有一篇博客有提到这个 ,而且还有一个问题,为什么a中的另一个4没有被删除?我们先一步一步来。当然,解决第一个问题你可能会想到把代码改成这样:a=[1,2,4,4,5,6]for i in range(len(a)): if i >=...原创 2020-04-18 17:50:54 · 271 阅读 · 0 评论 -
python中for中循环计数器能不能修改
答案是不能比如for i in range(10): print(i) if i==5: i=0 这段代码依旧只执行10次,而并不是C++中那样能够无限执行为什么呢?因为在python中for中修改i只会对当前这次的循环体有效,所以可以用通过用while代替如下图:在循环开始的时候就已经确定了循环的次数,所以i1出现的次数依旧为4次...原创 2020-04-18 17:09:11 · 1373 阅读 · 0 评论 -
python实现操作系统--银行家算法
先上代码:后面再细讲class yinhangjia(object): """sum_num为资源类型数量""" "process_num为进程数量" process_num = 5 sum_num = 3 # T=0似乎没有必要 def __init__(self): self.available = [0 for _ in...原创 2020-04-14 22:22:53 · 646 阅读 · 1 评论 -
python--私有属性和视为私有属性
python模块中的视为私有属性总的来说,python中有__xxx__,_ xxx,__ xxx几种特殊的属性在python模块中,我们经常会见到__xxx__,__xxx ,_x其中后面两种(__xxx ,_x)是习惯上的私有变量,我们不应该在外部使用它,而是应该通过调用内部函数来使用,但这里是不应该而不是不能,所以要靠我们自觉遵守这个标准,另外,在自定义模块的时候,也要考虑到对这种视为...原创 2020-04-09 10:01:56 · 215 阅读 · 0 评论 -
python--可变类型数据和不可变类型数据的区别
对于刚开始学习python的,可以不怎么理解的就是可变类型数据和不可变类型数据的本质区别是什么什么是可变类型数据呢:有int,float,string,tuple当然如果我说这些,大家应该也懂,所以我们讲的深一些不可变类型其实就是引用的地址处的值是不能被改变的,比如x=1,那么1所在的那块内存的值只能是1,此时1的引用计数为1,当x是其他对象的引用时,1的引用计数变为0,垃圾回收机制会...原创 2020-04-08 12:27:58 · 309 阅读 · 0 评论 -
python--通过闭包对python的一些根本认识
什么是闭包?在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。闭包的特点在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。下面是典型的闭包代...原创 2020-04-08 11:48:16 · 187 阅读 · 0 评论 -
python的垃圾回收机制
GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用。GC彻底把程序员从资源管理的重担中解放出来,让他们有更多的时间放在业务逻辑上。但这并不意味着码农就可以不去了解GC,毕竟多了解GC知识还是有利于我们写出更健壮的代码。引用计数Python语言默认采用的垃圾收集机制是『引用计数法 Reference Counti...转载 2019-12-24 12:59:25 · 97 阅读 · 0 评论