![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python
独舞人生
Everything should be simple
展开
-
python对象创建
先看一段代码,str.__call__("ADSDD")list.__call__("asdsad")dict.__call__(a=10)class A: def __init__(self, x): self.x = xA.__call__(10)结果依次为:'ADSDD'['a', 's', 'd', 's', 'a', 'd']{'a': 10}<__main__.A at 0x22adf1211f0>从输出我们可以发现,py原创 2021-08-06 18:54:56 · 297 阅读 · 0 评论 -
django.db.utils.OperationalError: (2006, “MySQL server has gone away 104, ‘Connection reset by peer‘
问题原因:由于数据库wait_timeout超时.set global wait_timeout=10; 解决办法:在settings中加入:def is_connection_usable(): try: connection.connection.ping() except: return False else: return Truedef my_execute_sql(self, result_ty原创 2021-04-13 16:33:50 · 1156 阅读 · 1 评论 -
解决vue打包后刷新问题
问题描述:以vue打包后运行再django后端为例, 当部署再django后端口,正常访问网页没问你,从页面中跳转也没问题,但是当跳转到非入口页面后,如果此时刷新页面就会报错,说页面路由不存在;解决办法:由于vue打包后只有一个文件,所以在这个页面每次访问时通过js动态获取当前url,然后从url中分割出来具体的路径,之后通过vue中的app.$router.push(path)跳转到相应的页面即可;具体实施:首先再vue项目中的main.js中加入一下代码:var url = win原创 2021-04-12 00:16:32 · 2417 阅读 · 0 评论 -
A星(AStar)算法的实现
关于AStar的原理这里简述一下,首先有一张地图,然后准备一个open list 和 close list,open list存放所有可能的路径,但是需要注意的是这个列表是动态怎加的,也就是每走一步就把当前可能的路径都加进去,然后每次从open list中去除一个最小代价的点,最为下一步的路径,并用该点计算之后可能的路径 在加入到open list中去,然后把这个代价最小的点放到close list中,表示该点已经走过了,如此循环直到从open list取出的最小代价点为 终点,此时通过回溯找到路径;代原创 2020-08-15 12:13:47 · 6175 阅读 · 2 评论 -
平衡二叉树的python实现
class Node: def __init__(self, val): self.val = val self.left = None self.right = None def __str__(self): return str(self.val) __repr__ = __str__def depth(node): if node is None: return 0 d1.原创 2020-08-09 10:46:06 · 737 阅读 · 1 评论 -
python原生实现xml解析算法
在python中xml解析有很多好用的库,一下实现仅供参考:实现思路,顺序遍历xml字符串,同时纪录xml结构信息,然后将这些结构信息对应起来,最后根据这些结构信息构建节点树;下面给出代码:"""xml 解析"""class Element: def __init__(self, name, properties=None, content=None, parent...原创 2020-03-07 23:05:35 · 359 阅读 · 0 评论 -
Python利用winpty创建可交互程序
在Windows上直接使用Python的任何模块都无创建完全的可交互程序,比如创建的cmd程序,当你使用该进程进行交互时一旦遇到Python、powershell、wmic等程序是无法进行交互的,那么如何使得创建的程序支持交互呢?这里使用winpty创建程序,winpty再很多程序中都有其身影,比如Windows的jetbrain系列(pycharm、IDEA、Goland等等)都采用winpty...原创 2019-12-23 00:06:39 · 2989 阅读 · 0 评论 -
windows远程下载和上传 Python实现
talk is cheap, show mycode:import subprocessimport ctypeskernel32 = ctypes.windll.kernel32language_code = {"0x804": "gbk", "0x409": "utf-8"}def get_default_language_encoding(): return l...原创 2019-12-08 15:32:57 · 493 阅读 · 0 评论 -
python实现http/https代理服务器
代码:# encoding:utf-8import socketimport _threadclass Header: """ 用于读取和解析头信息 """ def __init__(self, conn): self._method = None header = b'' try: ...原创 2019-11-24 19:17:23 · 21436 阅读 · 7 评论 -
Linux和Windows文件高速传输
以下代码使用socket实现了文件传输:server,运行在目标服务端上:import osimport signalimport psutilimport socketimport threadingfrom multiprocessing import Queue, Processclass AtomicInteger: def __init__(self, ...原创 2019-09-01 20:33:58 · 379 阅读 · 0 评论 -
openpyxl 复制cell单元格包括所有样式
target_cell.data_type = source_cell.data_typetarget_cell.fill = copy(source_cell.fill)if source_cell.has_style: target_cell._style = copy(source_cell._style) target_cell.font = copy(source_...原创 2019-08-07 00:46:33 · 12164 阅读 · 3 评论 -
python实现synchronized
利用python的装饰器实现类似java中的synchronizedfrom threading import Lock,Threadfrom functools import wrapsdefault_lock=Lock()lock_list={'default':Lock()}def synchronized(func=None,obj=None): if func i...原创 2019-05-29 22:40:01 · 4672 阅读 · 1 评论 -
python获取屏幕截图并转换为numpy数组
我们一般获取屏幕截图就是为了图像检测或者识别,但是通常调用第三方库只能获取截图的图片,不能直接获取其numpy数组,因为如果将截图保存为图片再读取那么不光速度慢,而且图片可能会有像素损失,所以并不好,下面给出截图并转换为numoy数组的方法:import copyimport PyQt5import win32guifrom PyQt5 import siphwnd_title...原创 2019-06-01 22:06:51 · 2035 阅读 · 0 评论 -
关于python中类的方法
python中的实例其实一般是没有方法属性的,那么为什么能够访问呢?这是因为当你访问属性的时候如果从对象的__dict__中找不到那么,就会从__class__.mro()返回的列表中根据广度优先原则去查找,因为mro返回的包含自身创造类和其他所有继承类的类对象,所以类中所有属性包括方法都是类对象所有的描述器也是由类对象的__getattribute__属性定义,而metaclass是用来创造类对...原创 2019-05-28 22:25:49 · 181 阅读 · 0 评论 -
python程序设计技巧之可调用对象
实现了 __call__方法的对象都可以被调用from multiprocessing import Process,Queueclass MyTask: def __init__(self,id,queue): self.id=id self.queue=queue def __call__(self): print(...原创 2019-05-28 21:34:48 · 136 阅读 · 0 评论 -
numpy中最重要的
[1,2,3,4,5,6,7,8,9] # 表示一列数据[[1,2,3,4,5,6,7,8,9]]# 表示一行数据numpy中所有运算都是基于张量的运算,也就是立体空间数组,不要想象括号,括号只是标识符而已,直接想象没有括号的空间数据结构这也算是一种数据结构。...原创 2019-05-21 23:57:19 · 213 阅读 · 0 评论 -
python 中的->符号
-> 仅仅是为了给检查工具指明返回值类型,比如def func()-> None: pass原创 2019-05-17 00:37:34 · 2477 阅读 · 0 评论 -
python __get__描述器
python中只有元类的__getattr__方法才会执行以下代码:def __getattribute__(self, key): "Emulate type_getattro() in Objects/typeobject.c" v = object.__getattribute__(self, key) if hasattr(v, '__get__'): ...原创 2019-05-17 00:35:29 · 260 阅读 · 0 评论 -
通俗理解装饰器
Python里的装饰器有时候是很好用的,可以减少代码量,比如在django的视图函数中,如果某个函数必须要登录才能访问,那么就以写一个装饰器来装饰那些函数,首先说一下如何理解装饰器呢,其实很简单,1.装装饰器必须是一个可调用对象,用来修饰被装饰的函数,使之增加一些额外功能;函数就是可调用对象的一种,任何对象只要拥有__call__属性就可以被调用,当然函数自带__call__属性了,...原创 2019-03-23 14:58:22 · 405 阅读 · 0 评论 -
python自己实现 面向对象
在学习python的时候,看到python类的__dict__()方法忽然产生了一个简单的想法去自己实现面向对象:'''自定义类'''People={}#类名def loadClassToMemory(): People .update( {'init': init, 'A': A, 'B': B} ) # 模拟类def init(self,name='',age=0):...原创 2018-09-28 15:32:07 · 202 阅读 · 0 评论 -
python检测字符串变量名是否合法
直接继承字符串类'''检测字符是否合法'''class String(str): illegal = {'and': 1, 'elif': 1, 'import': 1, 'return': 1,'as': 1, 'else': 1, 'in': 1, 'try': 1,'assert': 1, 'except': 1, 'is': 1, 'whi...原创 2018-09-28 23:40:39 · 3749 阅读 · 0 评论 -
python实现快速排序
快速排序的原理我就不叙述了,百科上面讲解很全面,下面是使用递归实现的def quickSort(datas,start,end): if start >= end: return reference=datas[start] # 参考数(中间数) i=start j=end while i<j: while ...原创 2018-09-29 09:17:37 · 152 阅读 · 0 评论 -
python使用链表实现列表list
在python中列表是使用链表实现的,下面使用单向链表实现Listclass List(): class Node(): def __init__(self,object_,next_node): self.object_=object_ self.next=next_node def __init__(self...原创 2018-09-29 09:29:25 · 2623 阅读 · 0 评论 -
超高性能字符串去重算法
在python中由于字典的键key不允许重复,可以利用这个特性去重,字典内部使用哈希表,所以性能能超强;在其它语言中都可以使用HashMap实现去重,当然使用数组也可以,数组只是哈希表的一种最简单的一种形式。def removal(string): result={} for i in string: result[i]=None return res...原创 2018-09-29 10:10:17 · 1511 阅读 · 0 评论 -
自己实现Python中的map函数
'''自定义map'''def map(func,*iterators): try: i = 0 while 1: yield func(*[j[i] for j in iterators]) i+=1 except IndexError : pass这里使用yield生成器...原创 2018-10-12 13:36:29 · 1399 阅读 · 0 评论 -
Python实现线程池类
线程池就是用来分配和管理线程的工具,如何实现线程池,下面我就给出一种实现方式:class SimpleThreadPoolExecutor: def __init__(self,maxSize=1,queueSize=100,waitTime=0): self.__task_queue=queue.Queue(queueSize) self.__ma...原创 2018-10-12 13:43:31 · 907 阅读 · 0 评论 -
python中的迭代器
python中的迭代器,正如python一样简单,任何对象只要拥有__iter__属性即可,该属性是一个方法,且该方法返回一个拥有__next__方法对象即可。任何对象必须满足上面所述两个原则才能成为迭代器。举个例子:python中的生成器就实现了__iter__方法,同时它也实现了__next__方法,从这里我们可以推测,生成器的__iter__方法返回的就是自身,因...原创 2019-04-08 19:59:49 · 106 阅读 · 0 评论 -
python使用装饰器实现单例模式
直接上代码:第一种使用函数装饰器实现并且使用锁保证线程安全:#不使用锁实现def SingleInstance(cls): def new(cls,*args,**kwargs): if not hasattr(cls,'instance'): cls.instance= object.__new__(cls) retu...原创 2019-04-08 20:33:30 · 1822 阅读 · 0 评论 -
python内置装饰器property、classmethod、staticmethod的实现原理
这三个装饰器的作用: property将方法变为属性; classmethod将实例方法变为类方法; staticmethod将实例方法变为静态方法;知道作用后我们就直接使用python实现:class Property(object): def __init__(self,f_get,f_set=None,f_del=None): ...原创 2019-04-21 02:58:53 · 461 阅读 · 0 评论 -
python中的function函数对象
python中一切皆对象,函数也是,那么函数对象有什么特点呢?最重要的是函数有两个特点:1.函数实现了__call__方法;2.函数实现了__get__方法;为什么说实现了这两个方法很重要呢?python是一个动态语言,你在使用对象的的时候并不需要在乎对象是什么类型,你只需要在乎这个对象到底有没有你想要的方法或者属性即可(方法也是属性),所以这就是鸭子类型,一个对象只要走起路来像鸭...原创 2019-04-24 14:52:16 · 1292 阅读 · 0 评论 -
python中的for else的原理
python中的for else的原理是,for语句跳出的原则是因为迭代器抛出了StopIteration异常,即try: while True: temp=next(iterator) do something 1except StopIteration: do something 2for else 恰好利用了这个异常捕...原创 2019-05-17 00:32:49 · 1369 阅读 · 0 评论 -
python获取函数信息
inspect.stack(), inspect.signature(), sys._getframe()等api应该可以获取调用my_super的函数的第一个参数原创 2019-05-17 00:34:01 · 835 阅读 · 0 评论 -
关于Python的多态最重要的
首先也是最重要的是python不支持多态,也不用支持多态,直接点说多态就是一个对象被不同的类型引用就表现出不同的形态,但是在Python中引用没有固定类型的,引用是可变的,所以对于任何一个对象只有一种形态就是它本身,不会有第二种形态,所以多态也就自然不存在了,并且它不像java中有类型转换,更重要的是它压根就不需要多态,因为你在使用一个对象的时候不会在乎它到底是什么类型的,你关心的是它有没有某个方...原创 2019-03-26 13:47:52 · 212 阅读 · 0 评论