一个前端工程师的python学习(1)

- 1 min

用node作了点儿小东西之后,开始发现很多东西不明白,尤其是设计思路上的一些问题,包括在后端开发中的一些看似约定俗成的原理,使用前端的思维理解起来确实比较困难。再加上最近工作不是特别忙,所以打算在闲暇有精力的时候,选一门后端语言看看,选来选来发现大家都说python比较好入门,所以就决定先从python开始。

因为本身不算是计算机科班出身,也没接受过什么正经的开发训练,从切页面开始到现在,说实话只能算是对js这门语言有亲切感,不论看什么问题的思路也被限制在了js中,不过好在几天学习下来,感觉python和js还是有很多共通之处的,尤其是最新版本的js(也就是使用了ECMA5规范的)。

下面还是来说说一个前端工程师眼中的python吧:

先说几个跟js中相同的关键字:

#####with 先来看js中的with,在js中with的主要作用是改变函数或者方法运行的作用域,如下代码所示:

var Obj = {
	'name' : 'A',
	'age' : '2',
	'getName' : function () {
		console.log(this.name)
	}
};

with(Obj) {
	console.log(name);
	console.log(age);
	getName();
}

结果分别是:
A
20
A 可以看出在js中,`with`之后的`{}`之中的代码块,是在`(Obj)`这个作用域内执行的,其中的`this`也指向了`Obj`这个变量。

再来看python中的with,最早看到这个关键字是在这样一段代码中:

with open(path/to/file) as f:
	print f.read()

主要功能是可以替换try

try
	f = open(path/to/file)
	print f.read()
finally
	if f:
		f.close()

但是现在看来with的主要功能并不仅仅是这个,虽然可以替代try是一个方面,于是我又查找了一些with的其他用法,大致意思是这样:

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

但是with还可以跟上下文管理器一起协作,完成在特定上下文环境中执行代码块。具体内容可以参考这篇文章

这里简单的说一下,所谓的上下文管理器,可以理解成是一个包含__enter____exit__方法的对象,在with中的代码执行之前,会先执行__enter__方法,然后将作用域切换到所在的上下文中,在代码执行完毕之后,执行__exit__方法,释放该作用域。

#####self & this 在pyton中,所有类的方法第一个参数都是self,这个self指向当前实例。

在js中,this的指向更为广泛,指向的位置,确切的说应该是代码的运行环境。不过在为原型定义方法时,在方法中this的指向也是当前的实例。

#####prototype & mateclass

在js中,通常来说,我们要创建一个所谓的,是这么定义的:

	var Cls = function cls() {
		// code
	};
	Cls.prototype = {
		constructor : Cls,
		init : function () {}
		// 其他方法
		...
	}
	
	var cls = new Cls();

在python中,通过class来定义类,但是还可以通过metaclass来制定class的公用方法。metaclass也可以理解为classprototype,即元对象,我们可以这么定义对象:

	class Cls(object) :
		__metaclass__ = MetaCls
		
		def __init__ (self) :
			pass

	
	class MetaCls(type) :
		def __new__(cls, name, bases, attrs) 
			pass
			
	
	cls = Cls();

看起来有没有很相似?

python中的metaclass更智能的把js中的关键字new作为了入口函数,同时也把init作为了构造函数,写在了class中。

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora