【Python】内建函数
世界Skill
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
ord
和int
、float
函数的功能皆为数据类型转换,不过三者对象有所不同。
ord
是chr
的逆函数,将一个ascii码还原为整形数字:
print ord("@")
输出是40
。
int
可以看作是bin
、hex
和oct
等的逆函数,其形式为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的反射特性,详见此处:
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]) = 3
,min([1, 2, 3]) = 1
,这两个函数和sorted
函数一样,也可以自定义排序规则。
pow
是乘方: pow(2, 3) = 8
。
divmod
返回两个参数的商和余 : divmod(3, 2) = (1, 1)
。
round
是取整,采用四舍五入: round(1.4) = 1.0
,round(1.5) = 2.0
。
sum
是求和: sum([1, 2, 3]) = 6
,sum(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
这两个函数用于读取控制台输入,将开文章单写。