【Python】内建函数

少女dtysky

世界Skill

时刻2016.06.08

Python中一些很有用的内建函数,包括zip、类型转换、反射等。


zip

zip函数用于改变数据的构造,它将会返回一个元组,元组的构造视传入的参数而定,在一般的应用中,一般会传入几个长度相等的可迭代量,比如列表。

例子:

test = zip([1, 2, 3], [3, 2, 1], [2, 1, 3])
print test

输出为:

[(1, 3, 2), (2, 2, 1), (3, 1, 3)]

可见,zip本质上是将三个列表进行了某种合并。

那么如何将已经被合并的三个列表还原呢?

加上不定参数符号*即可,如以下代码,其本质上是将test中的三个元组作为参数传入:

print zip(*test)

输出为:

[(1, 2, 3), (3, 2, 1), (2, 1, 3)]

bin/hex/oct/chr/str

一组相似的函数,可以将一个数组转换为某种进制下的字符串:

x = 0x40
print bin(x)
print hex(x)
print oct(x)
print chr(x)

分别输出:

bin为二进制: '0b1000000' hex为十六进制: '0x40'
oct为八进制: '0100'
chr为ascii码: '@'

当不在ascii码范围内时,chr输出和hex一致。

str函数将任意数据类型转换为字符串:

print str([1, 2, 3])

输出为[1, 2, 3]

ord/int/float

ordintfloat函数的功能皆为数据类型转换,不过三者对象有所不同。

ordchr的逆函数,将一个ascii码还原为整形数字:

print ord("@")

输出是40

int可以看作是binhexoct等的逆函数,其形式为int(c, base),第一个参数是字符,第二个是数的基,一般是2(十六进制)、8(八进制)、10(十进制)以及16(十六进制),默认是十进制。

print int("10") # 10
print int("10", 2) # 2
print int("10", 16) # 15
print int("10", 8) # 8

当然,int函数也有数字类型转换的功能,它可以将浮点等类型等转换为整形:

print int(1.1) # 1
print int(1.9) # 1

可见,int对于浮点数的转换使用的是向下取整

float函数接受形式为小数的字符串或者整形等:

print float("1.1") # 1.1
print float(1) # 1.0

isinstance/issubclass/dir/getattr/type

Python的反射特性,详见此处:

【Python】反射

eval/execfile

这两个函数本质上是一回事,不过一个参数是字符串,一个是文件。execfile可以看做是将文件的文本完整读入后传入eval函数执行。

eval函数是一种高级特性,它将文本解析后作为python的表达式执行:

x = 1
eval("x += 1")
print x

输出是2,可见x += 1作为表达式被执行了。

map/filter

这两个函数都针对可迭代量,比如元组和列表。
要注意可迭代量iterable和迭代器iterators是不同的东西。这两个可能会在后面的文章说到。

map函数的参数是一个可迭代量I和一个函数F,调用时,L中的元素Li被逐个取出,送入F中,F需要返回处理后的值Lia,然后Li将会被Lia替换。

x = [1, 2, 3]
def inc(x):
    return x + 1
print map(inc, x)

结果是[2, 3, 4]

filter函数顾名思义,是一个滤波器,他的参数和map函数一致,不过函数F的返回值是一个bool量,表示是否要保留该元素,如果为True则会保留。filter返回的是一个被筛选过的数组:

x = [1, 2, 3]
def odd(x):
    return x & 2 == 1
print filter(odd, x)

结果是[1, 3]

open/file

属于文件操作的一部分,后面开文章单写。

sorted/reversed

该函数用于排序,比较复杂,以后开文章单写。

abs/max/min/pow/divmod/round/sum

一些运算。

abs对数字取绝对值: abs(-1) = 1
max/min对列表或者元组取最大/最小值: max([1, 2, 3]) = 3min([1, 2, 3]) = 1,这两个函数和sorted函数一样,也可以自定义排序规则。
pow是乘方: pow(2, 3) = 8
divmod返回两个参数的商和余 : divmod(3, 2) = (1, 1)
round是取整,采用四舍五入: round(1.4) = 1.0round(1.5) = 2.0
sum是求和: sum([1, 2, 3]) = 6sum(1, 2, 3) = 6

range/xrange

range生成一个列表:

print range(1, 4)

输出[1, 2, 3]

xrange生成一个xrange对象:

print xrange(1, 4)

输出xrange(1, 4)

二者皆可用于循环,以for i in xrange(1, 10)类似的形式,但是xrange对大规模循环的支持更好,效率也更高。

input/raw_input

这两个函数用于读取控制台输入,将开文章单写。

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。