听说你会 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,关于 tuple 的 ...
用 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 not ...
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 = last_ ...
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 的机制究竟是怎样的。这就要分版本而论了,在 ...
「最简单」的 Core Data 上手指南
原文地址:The Easiest Core Data
原文作者:Alberto De Bortoli
译文出自:掘金翻译计划
译者:Zheaoli
校对者:Kulbear, cbangchen
在过去的几个月里,我花费了大量的时间在研究 Core Data 之上,我得去处理一个使用了很多陈旧的代码,糟糕的 Core Data 以及违反了多线程安全的项目。讲真,Core Data 学习起来非常的困难,在学习 Core Data 的时候,你肯定会感到迷惑和一种深深的挫败感。正是因为这些原因,我决定给出一种超级简单的解决方案。这个方案的特点就是简洁,线程安全,非常易于使用,这个方案能满足你大部分对于 Core Data 的需求。在经过若干次的迭代后,我所设计的方案最终成为一个成熟的方案。OK,女士们,先生们,现在请允许我隆重向您介绍 Skiathos 和 Skopelos。其中 Skiathos 是基于 Objective-C 所开发的,而 Skopelos 则基于 Swift 所开发的。这两个框架的名字来源于希腊的两个岛,在这里,我渡过了2016年的夏天,同时,在这里完成了两个框架 ...
详解模板引擎工作机制
原文地址:How a template engine works
原文作者:Shipeng Feng
译文出自:掘金翻译计划
译者: Zheaoli
校对者:Kulbear, hpoenixf
我已经使用各种模版引擎很久了,现在终于有时间研究一下模版引擎到底是如何工作的了。
简介简单的说,模版引擎是一种可以用来完成涉及大量文本数据的编程任务的工具。一般而言,我们经常在一个 web 应用中利用模板引擎来生成 HTML 。在 Python 中,当你想使用模板引擎的时候,你会发现你有不少的选择,比如jinja 或者是mako。从现在开始,我们将利用 tornado 中的模板引擎来讲解模板引擎的工作原理,在 tornado 中,自带的模板引擎相对的简单,能方便我们去深入的剖析其原理。
在我们研究(模版引擎)的实现原理之前,先让我们来看一个简单的接口调用例子。
123456789101112131415from tornado import templatePAGE_HTML = """<html> Hello, {{ us ...
菜鸟阅读 Flask 源码系列(1):Flask的router初探
文章来源:itsCoder 的 WeeklyBolg 项目
itsCoder主页:http://itscoder.com/
作者:写代码的香港记者
审阅者:Brucezz
前言没有一个完整的开源项目的的阅读经验的程序猿是一个不合格的程序猿,虽然曾经阅读过部分诸如 Redis 等项目的源码,但是还没有过一个完整的开源项目的阅读经验,因此在经过某个前辈的不断安利后,我决定用 Flask 来作为阅读开源源码计划的开始。而这一个系列的文章,将作为我自己的阅读笔记,来巩固自己曾经所没有重视的 Python 的很多细节。
关于 Flask关于 Flask 的背景知识,就不需要太多的描述了,网上已经有很多的资料了。在使用 Flask 的时候,我们经常用如下的方式来设置我们的自定义的路由:
12345678910111213141516171819202122232425262728293031323334353637##Flask官方Example中flaskr项目部分代码app = Flask(__name__)@app.route('/')def show_entr ...