摘要:Let’s start with an example on how to find the diff between two dictionaries using diff() method: from dictdiffer import diff, patch, swap, revert fir
阅读全文
摘要:1.获取后缀名 import os file_ext = os.path.splittext('./data/py/test.py') front,ext = file_ext print(front,ext) #'./data/py/test' #'.py' 2.创建文件夹 def mkdir(p
阅读全文
摘要:stringbook旋转后得到bookstring,写一段代码验证str1是否为str2旋转得到。 思路 转化为判断:str1是否为str2+str2的子串(因为该思路比较巧妙,故记录下来) def is_rotation(s1: str, s2: str) -> bool: if s1 is No
阅读全文
摘要:import re def camel(s): s = re.sub(r"(\s|_|-)+", " ", s).title().replace(" ", "") return s[0].lower() + s[1:] # 批量转化 def batch_camel(slist): return [c
阅读全文
摘要:[str("java"[i%3*4:]+"python"[i%5*6:] or i) for i in range(1,15)]
阅读全文
摘要:今天看见一个烧脑的代码,一时没看懂结果,刨个坑,看懂填 def product(*args, repeat=1): pools = [tuple(pool) for pool in args] * repeat result = [[]] for pool in pools: result = [x
阅读全文
摘要:chain函数串联a和b,兼顾内存效率同时写法更加优雅。 from itertools import chain a = [1,3,5,0] b = {'a':1,'b':2} for i in chain(a,b): print(i) #result:1,3,5,0,a,b for i in ch
阅读全文
摘要:该模块提供了堆排序算法的实现。堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点。 创建堆 heapq有两种方式创建堆, 一种是使用一个空列表,然后使用heapq.heappush()函数把值加入堆中,另外一种就是使用heap.heapify(list)转换列表成为堆结
阅读全文
摘要:Class也是Object 在理解metaclass之前,我们需要先理解Python中的class。从某种程度上来说,Python中的class的定位比较特殊。 对于大部分面向对象语言来说,class是一段定义了如何产生object的代码块。在Python中这一定义也成立: >>> class ex
阅读全文
摘要:eval:可以把字符串里的字符转换为可执行代码,但只支持一行字符。可以返回执行后得到的值。如下: f = "3+6+9+8" s = eval(f) print(s) 输出: "C:\Program Files\python3\python3.exe" D:/codes_py3/luhy_tool/
阅读全文
摘要:通过查看源码,我们知道app.run() 方法其实是执行了run_simple() 方法,源码如下: 我们可以通过下面一段代码探究run_simple() 方法都做了什么? from werkzeug.serving import run_simple from werkzeug.wrappers
阅读全文
摘要:import calendar monthRange = calendar.monthrange(2018, 10) (0, 31) 输出的是一个元组; 第一个元素,数字0是这个月的第一天是星期天(上一个月的最后一天为星期几(0-6)),星期天为0; 第二个元素,数字31是这个月的天数;
阅读全文
摘要:当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 例如,class Foo(object): __slots__ = ['foo']。这样做带来以下优点: 更快的属性访问速度 减少内存消耗 Slots的实现 我们首先来看看用纯Python是如何实现__slots__(为了
阅读全文
摘要:logger.debug("render : \033[1;34m{0}, {1}\033[0m".format(self.file_path, request.__dict__)) 书写格式: 开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m 注意:开头部分的三个参数:
阅读全文
摘要:在定义多对多(Many to Many)模型时,上一篇文章里说,中间表只用能db.Table定义。 这会导致很多Session Model的操作不可用,而且中间表中添加和查询额外字段也很麻烦。 其实,较新的SQLAlchemy版本,已经支持中间表格用模型定义了,这就是:Association Pro
阅读全文
摘要:外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增加user_id这个外键(一对多)。 #!/usr/bin/env python # encoding: utf-8 from sqlalchemy import create_e
阅读全文
摘要:安装 需要安装MySQLdb pip install sqlalchemy 安装完成后,执行 >>>import sqlalchemy >>>sqlalchemy.__version__ 连接数据库 在sqlalchemy中,session用于创建程序与数据库之间的会话。所有对象的载入和保存都需要通
阅读全文
摘要:Blinker 是一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播。Flask的信号机制就是基于它建立的。 Blinker的内核虽然小巧,但是功能却非常强大,它支持以下特性: 支持注册全局命名信号 支持匿名信号 支持自定义命名信号 支持与接收者之间的持久连
阅读全文
摘要:session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证; 注意 :Flask中的session是存在浏览器中 默认key是session(加密的cookie), 也
阅读全文
摘要:前言在《抽象基类(ABC)》中,基于C++讲述抽象基类。尽管Python设计上以鸭子类型为主,但仍有抽象基类(ABC)的一席之地,它被封装在了abc模块中供程序员使用。 abc模块有以下两个主要功能: 某种情况下,判定某个对象的类型,如:isinstance(a, Sized)强制子类必须实现某些方
阅读全文
摘要:你写了一个Python 3程序,还想要它适用于其他语言。你能复制全部代码库,然后刻意地检查每个.py文件,替换掉所有找到的文本字符串。但这意味着你有两份你代码的独立副本,每当你要做出个改动或修复个bug,你的工作量会加倍。而且如果你想要程序还适用于其他语言,就更糟了。 幸运的是,Python给了一个
阅读全文
摘要:pip install flask-babel 先初始化一个Flask-Babel的实例 from flask import Flask from flask.ext.babel import Babel app = Flask(__name__) babel = Babel(app) 设置语言和时
阅读全文
摘要:Flask Signals简介 Flask Signals和操作系统的signals系统很类似,都是通过信号(也可以说是事件event)来通知已经注册的回调函数,让回调函数自动开始执行。Flask定义了自己的一套核心signals和对应的functions(用于发起消息,注册回调函数),我们需要定义
阅读全文
摘要:转载一个操作的例子: https://www.cnblogs.com/anliven/p/9840583.html 太多了,直接官网看介绍吧 下载和官网: https://pypi.org/project/setuptools/ 文档:https://setuptools.readthedocs.i
阅读全文
摘要:Dockerfile Docker 通过 dockerfile 配置来把应用构建成镜像,dockerfile 是一个包含了配置和创建应用的全部命令的文本。Docker 官网上有对 dockerfile 的详细说明文档 看了文档后,对其使用有大致的了解,对不是太复杂的应用的容器化,已经能实践了,下面对
阅读全文
摘要:Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现。恰好我最近在开发的一个小工具需要在命令行环境下操作,就写个学习笔记。 国际惯例,先来一段 “Hello World” 程序(假定已经安装了 Click 包)。 #
阅读全文
摘要:DDL执行 线上服务器执行DDL,更新表结构,需要谨慎,结构更改会导致全表被独占锁定(新版本有改善) 避免这种情况,使用COPY策略,而不是直接执行ALTER TABLE语句 思路:创建一个新表,满足新要求,将旧表数据逐条导入新表,同时表上可以执行其他任务,导入的过程其他任务都记录在日志,导入完成后
阅读全文
摘要:分表 通常指:通过应用程序层,将数据划分到不同的表中进行存储 对比分区,分区是在服务器层完成的分区算法 分表会导致客户端明显的改变,在服务器端出现结构相同的多张表,甚至可以把多张表分到不同的服务器上 以账单表为例:数据库可能会有这样的情况 create table bill201710( id in
阅读全文
摘要:分区: 分区也是MySQL优化中的一个重要方式 将一个表中的数据和索引,分散到不同的文件中进行存储 通常情况下,一个表,对应一组数据和索引文件,一个表的数据和索引集中存储在这组文件中 当一个表出现了大量的记录时,可以将其分布到不同的数据和索引文件中进行存储 Innodb来说,一个表对应多个ibd文件
阅读全文
摘要:查询缓存: MySQL提供的数据缓存QueryCache,用于缓存SELECT查询的结果 默认不开启,需要在配置文件中开启缓存(my.ini/my.cnf) 在[mysqld]段中,修改query_cache_type完成配置: 0:关闭 1:开启,但是默认缓存,需要增加sql-no-cache提示
阅读全文
摘要:MySQL优化中,最重要的优化手段就是索引,也是最常用的优化手段 索引简介: 索引:关键字与数据位置之间的映射关系 关键字:从数据中提取,用于标识,检索数据的特定内容 目的:加快检索 索引检索为什么快: (1)关键字相对于数据本身,量较小 (2)关键字都是排序好的 MySQL中索引的类型: 普通索引
阅读全文
摘要:存储引擎: 早期的时候,存在如何选择MyISAM和Innodb? 现在,Innodb不断地发展完善,成为了主流的存储引擎。 因此5.5之后的mysql,无脑选择Innodb即可。 MYSQL中的数据,索引以及其他的对象,是如何存储的,是一套文件系统的实现。 MYSQL支持很多的存储引擎,使用 SHO
阅读全文
摘要:Web项目中,当Java或者Go等语言速度提升到瓶颈的时候,我们需要关心MySQL的优化 可以优化的方面有很多:设计表、负载均衡、读写分离、SQL语句优化等 (1)IP地址设计 例如我们需要存储IP地址:192.168.1.1 第一反应是选用VARCHAR(15);但是更好的方式是INT UNSIG
阅读全文
摘要:借助find_modules,import_string优雅地注册蓝图模块 find_modules, import_string这两个函数包含在werkzeug.utils工具包中,借助着两个工具函数可以帮助我们在更优雅的给应用注册blueprint模块,尤其是当项目中blueprint模块很多的
阅读全文
摘要:一个Python字典表达式谜题 让我们探究一下下面这个晦涩的python字典表达式,以找出在python解释器的中未知的内部到底发生了什么。 # 一个python谜题:这是一个秘密 # 这个表达式计算以后会得到什么结果? >>> {True: 'yes', 1: 'no', 1.0: 'maybe'
阅读全文
摘要:前言 在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因。当你在运行的python脚本。使用了相对引用方式 (类似import ..module) 去引用包时,可能会出现这个
阅读全文
摘要:在开发和调试wsgi应用程序时,有很多方法可以自动重新加载代码。例如,如果你使用的是werkzeug,则只需要传use_reloader参数即可: run_sumple('127.0.0.1', 5000, app, use_reloader=True) 对于Flask,实际上在内部使用werkze
阅读全文
摘要:什么是websocket WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数
阅读全文
摘要:with 语法 平常在写Python代码的时候,经常会用到with 来处理一个上下文环境,比如文件的打开关闭,数据库的连接关闭等等。 with语法的使用,需要我们处理的对象实现__enter__和__exit__两个魔术方法来支持。__enter__函数处理逻辑函数之前需要做的事情,并返回操作对象作
阅读全文
摘要:因为项目用的python3.5,字典还是无序的,所以需要把OrderedDict捡一捡。 1.创建有序字典 import collections dic = collections.OrderedDict() dic['k1'] = 'v1' dic['k2'] = 'v2' dic['k3'] =
阅读全文
摘要:最近项目中需要与管易云erp做对接,看了他的接口文档,php的示例代码,于是用python仿写。 其中传的参数data中前面几个json数据是固定的,最后需要加一个签名,该签名是对前面的json数据字符串化后,首尾拼接上screct字符串,再做md5处理(32位大写),再将该签名添加到之前的json
阅读全文
摘要:多态:同一件事情由于条件不同产生的结果不同 由于Go语言中结构体不能相互转换,所以没有结构体(父子结构体)的多态,只有基于接口的多态.这也符合Go语言对面向对象的诠释 多态在代码层面最常见的一种方式是接口当作方法参数 代码示例 结构体实现了接口的全部方法,就认为结构体属于接口类型,这是可以把结构体变
阅读全文
摘要:接口解释:接口是一组行为规范的定义. 接口中只能有方法声明,方法只能有名称、参数、返回值,不能有方法体 每个接口中可以有多个方法声明,结构体把接口中 所有 方法都重写后,结构体就属于接口类型 Go语言中接口和结构体之间的关系是传统面向对象中is-like-a的关系 定义接口类型关键字是interfa
阅读全文
摘要:按照传统面向对象思想,继承就是把同一类事物提出共同点为父类,让子类可以复用父类的可访问性内容. 继承有多种实现方式 通过关键字继承,强耦合实现方式 组合式继承,松耦合继承方式 使用过Java或C#的应该知道尽量少用继承而是使用组合代替继承,可以使用高内聚,低耦合.Java之父之前在一次采访的时候也说
阅读全文
摘要:封装主要体现在两个方面:封装数据、封装业务 Go语言中通过首字母大小控制访问权限.属性首字母小写对外提供访问方法是封装数据最常见的实现方式 可以通过方法封装业务 提出方法是封装 控制结构体属性访问,对外提供访问方法也是封装 在面向对象中封装的好处: 安全性.结构体属性访问受到限制,必须按照特定访问渠
阅读全文
摘要:一.面向对象和面向过程 面向过程编程代码只适用于当前情况,而面向对象编程更注重重用,同一套代码可以使用多样的情况 面向过程编程(OPP)就是详细的按照顺序的把整个过程实现 例如:学生从家里去上学需要出门-->找到OFO-->扫描开锁-->上车-->直行-->左拐-->找到”粥饼面”-->停车-->上
阅读全文
摘要:方法和函数语法比较像,区别是函数属于包,通过包调用函数,而方法属于结构体,通过结构体变量调用 默认是函数,隶属于包,所以需要添加标识.告诉编译器这个方法属性哪个结构体 调用方法时就把调用者赋值给接收者(下面的变量名就是接受者) func (变量名 结构体类型) 方法名(参数列表) 返回值列表{ //
阅读全文
摘要:由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用时结构体指针完成 可以结合new(T)函数创建结构体指针 peo := new(People) //因为结构体本质是值类型,所以创建结构体指针时已经开辟了内存空间 fmt.Println(peo == nil) //输出:false //由
阅读全文