一个前端开发工程师的Python学习(2)

- 2 mins

上一篇文章大概说了一下pythonjs的一些关键字。

这次来说说数据类型的异同。

我一向是主张工程师多了解几门语言,了解了之后,你就会发现,数据类型这个东西,在高级语言中,基本都是大同小异,只不过有的语言牛逼,提供的数据类型更丰富,有的不那么牛逼,提供的数据类型比较基本而已。

####字符串

在大多数语言中,字符串都是最基本的一种数据类型。同样,大多数的脚本语言,实际上也都是在处理字符串。提到字符串,就不得不提字符编码这个概念。不同的地区的文字应用不同的字符编码,但是在计算机的世界里,绝大多数时候,我们都是用unicode的子集utf-8这个字符串集。

js中,我们可以通过str.charCodeAt(index)的方式,获取字符串中某个字符的unicode编码。

python中,我们可以通过ordchr这两个方法将字符串unicode编码互相转换。

####Array & list & tuple & set

js中,我们很熟悉Array的概念,定义一个数组,我们通常使用

var arr = [1,2,3,4]

这样的方法,数组的长度和内容随时可变。还可以对数组使用pop,push这样的方法添加和删除元素。

python中,相对应js,数组这个概念被细分为两种listtuple。其中list的概念和定义方法基本跟js中的Array没有区别。但是list没有push方法,取而代之的是append方法,另外,list还有个insert方法,可以在list的任意位置上插入元素。

但是,tuple表示的可以理解为静态数组,即一旦声明,就不可改变了。

另外,pythonlist的定义方式为

list = [1,2,3,4]

tuple的定义方式为

tuple = (1,2,3,4)

再另外,在python中还有另一种数据类型,称为setset可以理解为一种特殊的list,它只存储不重复的元素,如果有相同元素被添加到set中,会覆盖之前相同的元素;

set的定义方式为

set = set([1,2,3,4])

另外,虽然set看起来很像list,但是却不具有list的下标属性,也就是说你没办法通过set[0]这样的方式取出set中的某个元素。

从另一个方面来思考,你也可以把set当初另一种类型的dict,只不过它只存储了key,而每一存储value。对于set来说,可以使用set.add(key)set.remove(key)来添加或者删除元素。

####Objec & dict

js里,object是一个非常非常非常常用的数据类型,一般用来存储任何key-value类型的数据,通常我们可以为一个object定义任意的属性和方法。例如

var obj = {name:"a",age:"20"}

python中,与object相对应的数据类型称为dict,也是用于存储key-value类型的数据,定义方法也跟js一致,例如:

dict = {name:"a",age:"20"}

另外,在js中,我们可以很方便的对object的值做操作,可以通过:

obj.name = 'a';

obj['name'] = 'a';

来添加或者改变value。

也可以通过

delete obj.name;

delete obj['name'];

的方式删除某对key-value值。

但是在python中,我们无法通过.来对dict元素进行赋值和取值,所有对dict元素的操作都必须使用

dict[key]=value

的方式进行,不能使用.

除了使用[key]来取值,我们还可以使用get方法,例如:

dict.get(key)

另外,与js中的delete相对应的,我们可以使用pop方法来删除某个key-value键值对。

####方法及高级特性

######切片

js中,对于数组我们有slicesplice方法,可以对数组进行切片。不同的在于slice方法不会对原数组产生影响,而splice方法是在原数组进行操作,如下所示:

var arr = [1,2,3,4,5];
var b = arr.slice(0,1);
console.log(arr);		// [1,2,3,4,5]
console.log(b);			// 1
	
var arr = [1,2,3,4,5];
var b = arr.splice(0,1);
console.log(arr);		// [2,3,4,5]
console.log(b);			// 1

python中,与之对应的方法非常简洁,如下所示:

var list = [1,2,3,4,5]
var b = list[0:1]
b			// [1]
list		// [1,2,3,4,5]

看起来只用[x:y]就可以完成list的切片,但是更牛逼的地方在于[x:y]不光可以完成这种简单的操作,还可以完成更复杂的操作,假设我们想在一个list中,间隔一个元素进行取值,在js中,我们只能通过for循环来搞定这件事,但是在python中,直接通过:

list = [1,2,3,4,5]
b = list[::2]

b			// [1,3,5]
list		// [1,2,3,4,5]

就可以搞定了!

除了list之外,这种[x:y:z]的切片方式,还可以应用在tuplestring中,对应的返回值也是tuplestring

######生成

js中,假设我们要生成一个从1到1000的数组,那么肯定是使用for循环的方式,循环个1000次,代码如下:

var arr = [];
for (var i = 1,len = 1000;i <= len;i++) {
	arr.push(i);
};

但是在python中,可以直接通过一句话就完成了列表的生成:

list = range(1,1001);

与上面所说的切片一样,python中还提供了更牛逼的方法生成不同需求的list,假设现在我们要生成一个1000以内所以偶数平方的数组,使用for循环的话,应该这么做:

list = [];
for i in range(1,1001):
	if i % 2 == 0:
		list.append(i)

但是使用range,只用一行就可以轻松搞定:

list = [x*x for x in range(1,1001) if x%2 == 0]
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora