你所不知道的 Flask Part1:Route 初探
前言我自己都记不清楚上一次写博客是什么时候了(笑),上一次挖的坑现在还没填完,干脆,开个新坑吧,你不知道的 Flask ,记录下自己用 Flask 过程中一些很好玩的东西,当然很大可能我又会中途弃坑 开篇引子之前遇到一个很奇怪的需求,需要在flask中支持正则表达式比如,@app.route('/api/(.*?)') 这样,在视图函数被调用的时候,能传入 URL 中正则匹配的值。不过 Flask 路由中默认不支持这样的方法,那么我们该怎么办?我们先思考五分钟吧? 好了,我先给出解决方案吧 12345678910from flask import Flaskfrom werkzeug.routing import BaseConverterclass RegexConverter(BaseConverter): def __init__(self, map, *args): self.map = map self.regex = args[0]app =...
asyncio 笔记
来源 annotated-py-asyncio 阅读补充:1. 基本概念:1.1 协程: “协程 是为非抢占式多任务产生子程序的计算机程序组件,协程允许不同入口点在不同位置暂停或开始执行程序”。 从技术的角度来说,“协程就是你可以暂停执行的函数”。 如果你把它理解成“就像生成器一样”,那么你就想对了。 1.2 事件循环: 事件循环 “是一种等待程序分配事件或消息的编程架构”。 基本上来说事件循环就是,“当A发生时,执行B”。 或许最简单的例子来解释这一概念就是用每个浏览器中都存在的JavaScript事件循环。 当你点击了某个东西(“当A发生时”),这一点击动作会发送给JavaScript的事件循环,并检查是否存在注册过的 onclick 回调来处理这一点击(“执行B”)。 只要有注册过的回调函数就会伴随点击动作的细节信息被执行。 事件循环被认为是一种循环是因为它不停地收集事件并通过循环来发如何应对这些事件。 1.3 Python 的事件循环: 对 Python 来说,用来提供事件循环的 asyncio 被加入标准库中。 asyncio...
写在黎明之前
年少之成绩,或有时而可商,年少之作为,或有时而可讨,为此独立之精神,与自由之思想,纵历百十年整,亦与沱江水长流,共三光而永光 其实突然发现,没写过点什么特殊的文字,来纪念自己这一年。 今天,2月10日,距离离职完毕还有五天,距离离开成都还有11天,距离入职,还有17天。坐在自己屋子里,看着窗外的云和雨雾,慢慢的,用一点东西,来纪念自己过去的一年。 云起 Hey man, think about this world and go fuck it 16年,一开年,便遭受了一个算是影响未来的挫折吧。现在想想,从1年6个月的感情里脱身出来并不是一件很容易的事情。更何况,遇到太多的事情让我更为烦心。 其实在大学尾声的时候,来回顾自己这四年,可能也更多的算是一个 loser 吧,竞赛失败。专业课挂科四分之一,延期毕业。不过心高气傲的我,还是不喜欢自己被同为一群 loser 的人所鄙视。这种感觉不是太好。 在师父的教育下,慢慢的入了 Python...
听说你会 Python (2):Python 高阶数据结构解析
前言之前写过一篇《听说你会 Python ?》的文章,大家反响都还不错,那么我想干脆把这个文章做成一个系列,继续讲解一下 Python 当中那些不为人知的细节吧。然后之前在和师父川爷讨论面试的时候,川爷说了一句“要是我,我就考考你们怎么去实现一个 namedtuple ,好用,方便,又能区分人”,说者无心,听者有意,我于是决定在这次的文章中,和大家聊一聊 Python 中一个特殊的高阶数据结构, namedtuple 的实现。 Let’s beginnamedtuple介绍tuple 是 Python 中 build-in 的一种特殊的数据结构,它是一种 immutable 的数据集合,我们经常会这样使用它 123456789def test(): a = (1, 2) print(a) return aif __name__ == '__main__': b, c = test() print(a) Right,很多时候我们会直接使用 tuple 来进行一些数据的 packing/unpacking 的操作。OK,关于...
用 Python 实现一个最简单的对象模型
原文地址:A Simple Object Model 原文作者:Carl Friedrich Bolz 译文出自:掘金翻译计划 译者:Zheaoli 校对者:Yuze Ma, Gran 一个简单的对象模型Carl Friedrich Bolz 是一位在伦敦国王大学任职的研究员,他沉迷于动态语言的实现及优化等领域而不可自拔。他是 PyPy/RPython 的核心开发者之一,于此同时,他也在为 Prolog, Racket, Smalltalk, PHP 和 Ruby 等语言贡献代码。这是他的 Twitter @cfbolz 。 开篇面向对象编程是目前被广泛使用的一种编程范式,这种编程范式也被大量现代编程语言所支持。虽然大部分语言给程序猿提供了相似的面向对象的机制,但是如果深究细节的话,还是能发现它们之间还是有很多不同的。大部分的语言的共同点在于都拥有对象处理和继承机制。而对于类来说的话,并不是每种语言都完美支持它。比如对于 Self 或者 JavaScript...
听说你会 Python ?
前言最近觉得 Python 太“简单了”,于是在师父川爷面前放肆了一把:“我觉得 Python 是世界上最简单的语言!”。于是川爷嘴角闪过了一丝轻蔑的微笑(内心 OS:Naive!,作为一个 Python 开发者,我必须要给你一点人生经验,不然你不知道天高地厚!)于是川爷给我了一份满分 100 分的题,然后这篇文章就是记录下做这套题所踩过的坑。 1.列表生成器描述下面的代码会报错,为什么? 1234567class A(object): x = 1 gen = (x for _ in xrange(10)) # gen=(x for _ in range(10))if __name__ == "__main__": print(list(A.gen)) 答案这个问题是变量作用域问题,在 gen=(x for _ in xrange(10)) 中 gen 是一个 generator ,在 generator 中变量有自己的一套作用域,与其余作用域空间相互隔离。因此,将会出现这样的 NameError: name 'x' is...
Swift 声明式程序设计
原文地址:Declarative API Design in Swift 原文作者:Benjamin Encz 译文出自:掘金翻译计划 译者:Zheaoli 校对者:luoyaqifei, Edison-Hsu 在我第一份 iOS 开发工程师的工作中,我编写了一个 XML 解析器和一个简单的布局工具,两个东西都是基于声明式接口。XML 解析器是基于 .plist 文件来实现 Objective-C 类关系映射。而布局工具则允许你利用类似 HTML 一样标签化的语法来实现界面布局(不过这个工具使用的前提是已经正确使用 AutoLayout & CollectionViews)。 尽管这两个库都不完美,它们还是展现了声明式代码的四大优点: 关注点分离: 我们在使用声明式风格编写的代码时声明了意图,从而无需关注具体的底层实现,可以说这样的分离是自然发生的。 减少重复的代码: 所有声明式代码都共用一套样式实现,这里面很多属于配置文件,这样可以减少重复代码所带来的风险。 优秀的 API 设计: 声明式 API...
Python 描述符入门指北
很久都没写 Flask 代码相关了,想想也真是惭愧,然并卵,这次还是不写 Flask 相关,不服你来打我啊(就这么贱,有本事咬我啊这次我来写一下 Python 一个很重要的东西,即 Descriptor (描述符) 初识描述符老规矩,Talk is cheap,Show me the code. 我们先来看看一段代码 1234567891011121314151617181920212223class Person(object): """""" #---------------------------------------------------------------------- def __init__(self, first_name, last_name): """Constructor""" self.first_name = first_name self.last_name =...
Swift 3 中的函数参数命名规范指北
原文地址:Function Naming In Swift 3 原文作者:Pablo Villar 译文出自:掘金翻译计划 译者:Zheaoli 校对者:Kulbear, Tuccuay 昨天,我开始将这个 Jayme 迁移到 Swift 3。这是我第一次将一个项目从 Swift 2.2 迁移至 Swift 3。说实话这个过程十分的繁琐,由于 Swift 3 在老版本基础上发生了很多比较大的改变,我不得不承认眼前这样一个事实,除了花费较多的时间以外,没有其余的捷径可走。不过这样的经历也带来一点好处:我对 Swift 3 的理解变得更为深入,对我来讲,这可能是最好的消息了。😃 在迁移代码的过程中,我需要做出很多的选择。更为蛋疼的是,整个迁移过程并不是修改代码那么简单,你还需要用耐心去一点点适应 Swift 3 中带来的新变化。某种意义上来讲,修改代码只是整个迁移过程的开始而已。 如果你已经决定将你的代码迁移到 Swift 3...
聊聊 Python 中生成器和协程那点事儿
文章来源:itsCoder 的 WeeklyBolg 项目 itsCoder主页:http://itscoder.com/ 作者:Manjusaka 审阅者:allenwu,Brucezz 写在前面的话本来想这周继续写写 Flask 那点破事儿的,但是想了想决定换换口味,来聊聊很不容易理解但是很重要的 Python 中的生成器和协程。 Generators 科普我猜大家对于生成器肯定并不陌生,但是为了能让我愉快的继续装逼,我们还是用点篇幅讲一下什么是生成器吧。比如在 Python 里,我们想生成一个范围 (1,100000) 的一个 list,于是我们无脑写了如下的代码出来 12345def generateList(start,stop): tempList=[] for i in range(start,stop): tempList.append(i) return tempList 注1:这里有同学提出了为什么我们不直接返回 range(start,stop),Nice question,这里涉及到一个基础问题,range...