Python - 内置函数
filter
filter(处理逻辑, 可遍历对象)遍历序列中的每个元素,判断每个元素的布尔值为True则保留元素.
用法:返回执行结果为TRUE的入参(入参是列表字符元组)
print filter(lambda x:x*x-4,range(10))
#结果:[0, 1, 3, 4, 5, 6, 7, 8, 9]
map
map(处理逻辑, 可遍历的对象) 处理序列中的每个元素, 元素个数及位置
与原来一样.用法:对列表入参依次执行函数。入参为列表,有多少个列表,就应该有多少个入参。
print map(lambda x:x*x-4,range(10))
#结果:[-4, -3, 0, 5, 12, 21, 32, 45, 60, 77]
print map(lambda x,y:x*y-4,range(3),[8,9,10])
#结果:[-4, 5, 16]
reduce
from funtools import reduce
reduce(函数, 序列, 默认空参数)处理一个序列, 然后把写进行合作操作
用法:先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给fuction,最终返回一个结果值
#接收的入参个数只能为2
print reduce(lambda x,y:x*y-4,range(4))
#结果:-40
#计算0到100的和
print reduce(lambda x,y:x+y, range(101))
#结果:5050
print reduce(lambda x,y:x+y, range(101),100)
#结果:5150
sort(cmp=None, key=None, reverse=False) 和 sorted(iterable, cmp=None, key=None, reverse=False)
sort是容器的函数,sorted是Python的内建函数相同的参数。
简单解释一下两函数:
sort(cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)
sort是容器的函数,sorted是Python的内建函数相同的参数。
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项。cmp(e1, e2) 是带两个参数的比较函数, 返回值:
负数: e1 < e2,
0: e1 == e2,
正数: e1 > e2。
默认为 None, 即用内建的比较函数。
key:用列表元素的某个已命名的属性或函数(只有一个参数并且返回一个用于排序的值)作为关键字,有默认值,迭代集合中的一项。
reverse:排序规则,reverse = True 或者 reverse = False,有默认值。
-
对于一个无序的列表a,调用a.sort(),对a进行排序后返回a。
而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。>>> a=[1,3,5,2,9,4,7,8,6,0] >>> a.sort() >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a=[1,3,5,2,9,4,7,8,6,0] >>> sorted(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a [1, 3, 5, 2, 9, 4, 7, 8, 6, 0]
复杂点的
>>> list1=[(6,\'cangjingkong\',20),(4,\'wutenglan\',30),(7,\'boduoyejiyi\',25)]
>>> list1.sort()
>>> list1
[(4, \'wutenglan\', 30), (6, \'cangjingkong\', 20), (7, \'boduoyejiyi\', 25)]
>>> list1=[(6,\'cangjingkong\',20),(4,\'wutenglan\',30),(7,\'boduoyejiyi\',25)]
>>> sorted(list1)
[(4, \'wutenglan\', 30), (6, \'cangjingkong\', 20), (7, \'boduoyejiyi\', 25)]
>>> list1
[(6, \'cangjingkong\', 20), (4, \'wutenglan\', 30), (7, \'boduoyejiyi\', 25)]
当list由tuple组成时,默认情况下,sort和sorted都会根据tuplp[0]作为排序的key进行排序
-
基于key函数排序:
>>> list1=[(6,\'cangjingkong\',20),(4,\'wutenglan\',30),(7,\'boduoyejiyi\',25)] >>> list1.sort(key=lambda employee : employee[2]) >>> list1 [(6, \'cangjingkong\', 20), (7, \'boduoyejiyi\', 25), (4, \'wutenglan\', 30)] >>> list1=[(6,\'cangjingkong\',20),(4,\'wutenglan\',30),(7,\'boduoyejiyi\',25)] >>> sorted(list1,key=lambda employee : employee[2]) [(6, \'cangjingkong\', 20), (7, \'boduoyejiyi\', 25), (4, \'wutenglan\', 30)] >>> list1 [(6, \'cangjingkong\', 20), (4, \'wutenglan\', 30), (7, \'boduoyejiyi\', 25)]
-
基于cmp函数排序:
>>> list1=[(6,\'cangjingkong\',20),(4,\'wutenglan\',30),(7,\'boduoyejiyi\',25)] >>> list1.sort(cmp=lambda x,y : cmp(x[1],y[1])) >>> list1 [(7, \'boduoyejiyi\', 25), (6, \'cangjingkong\', 20), (4, \'wutenglan\', 30)] >>> list1=[(6,\'cangjingkong\',20),(4,\'wutenglan\',30),(7,\'boduoyejiyi\',25)] >>> sorted(list1,cmp=lambda x,y : cmp(x[1],y[1])) [(7, \'boduoyejiyi\', 25), (6, \'cangjingkong\', 20), (4, \'wutenglan\', 30)] >>> list1 [(6, \'cangjingkong\', 20), (4, \'wutenglan\', 30), (7, \'boduoyejiyi\', 25)]
3.基于升序/降序排序:
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a.sort(reverse=Ture)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name \'Ture\' is not defined
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort(reverse=True)
>>> a
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> sorted(a,reverse=False)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> sorted(a,reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a
[1, 3, 5, 2, 9, 4, 7, 8, 6, 0]
常用内置函数总结
一. 数学运算类型
abs(x)
求绝对值
1. 参数可以是整型, 也可以是复数
2. 若参数是复数, 则返回复数的模
complex([real[,imag]])
创建一个复数
divmod(a,b)
分别取商和余数
注意: 整型, 浮点型都可以
float([x])
将一个字符串或数转换为浮点数,如果五参数将返回0.0
int([x[,base]])
将一个字符转换为int类型,base表示进制
long([x[,base]])
将一个字符串转换为long类型
pow(x,y[,z])
返回x的一次幂
range([start],stop[,step])
产生一个序列, 默认从0开始
round(x[,n])
四舍五入
sum(iterable[,start])
对集合求和
oct(x)
将一个数字转化为8进制
hex(x)
将整数x转化为16进制字符串
chr(i)
返回整数i对应的ASCII字符
bin(x)
将整数转化为二进制字符串
bool([x])
将x转化为Boolean类型
二. 集合类操作
basestring()
str和unicode的超类
不能直接调用, 可以用作isinstance判断
format(value[,format_spec])
格式化输出字符串
格式化的参数顺序从0开始,如"I am {0},I like {1}"
unichr(i)
返回给定int类型的unicode
enumerate(sequence [, start = 0])
返回一个可枚举的对象,该对象的next()方法将返回一个tuple
>>>seasons = [\'Spring\', \'Summer\', \'Fall\', \'Winter\']
>>> list(enumerate(seasons))
[(0, \'Spring\'), (1, \'Summer\'), (2, \'Fall\'), (3, \'Winter\')]
>>> list(enumerate(seasons, start=1)) # 下标从 1 开始
[(1, \'Spring\'), (2, \'Summer\'), (3, \'Fall\'), (4, \'Winter\')]
iter(0[,sentinel])
生成一个对象的迭代器,第二个参数表示分隔符
s = \'软件是深圳的未来\' #s是一个iterable对象,它有__getitem__()方法
it = iter(s) #it是一个iterator对象,它有 __next__()和__iter__()方法
print(s)
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
结果输出如下:
软件是深圳的未来
软
件
是
深
**max(iterable[, args...][key]) **
返回集合中的最大值
min(iterable[, args...][key])
返回集合中的最小值
dict([arg])
创建数据字典
**list([iterable]) **
将一个集合类转换为另外一个集合类
set()
返回新的集合对象。
>>>x = set(\'runoob\')
>>> y = set(\'google\')
>>> x, y
(set([\'b\', \'r\', \'u\', \'o\', \'n\']), set([\'e\', \'o\', \'g\', \'l\'])) # 重复的被删除
>>> x & y # 交集
set([\'o\'])
>>> x | y # 并集
set([\'b\', \'e\', \'g\', \'l\', \'o\', \'n\', \'r\', \'u\'])
>>> x - y # 差集
set([\'r\', \'b\', \'u\', \'n\'])
>>>
frozenset([iterable])
产生一个不可变的set
**str([object]) **
转换为string类型
**tuple([iterable]) **
生成一个tuple类型
**xrange([start], stop[, step]) **
xrange()函数与range()类似,但xrnage()并不创建列表,而是返回一个xrange对象,它的行为与列表相似,但是只在需要时才计算列表值,当列表很大时,这个特性能为我们节省内存
三. 逻辑判断
all(iterable)
1、集合中的元素都为真的时候为真
2、特别的,若为空串返回为True
any(iterable)
1、集合中的元素有一个为真的时候为真
2、特别的,若为空串返回为False
cmp(x, y)
如果x < y ,返回负数;x == y, 返回0;x > y,返回正数
四. 反射
callable(object)
检查对象object是否可调用
1、类是可以被调用的
2、实例是不可以被调用的,除非类中声明了__call__方法
classmethod()
1、注解,用来说明这个方式是个类方法
2、类方法即可被类调用,也可以被实例调用
3、类方法类似于Java中的static方法
4、类方法中不需要有self参数
compile(source, filename,mode[, flags[, dont_inherit]])
将source编译为代码或者AST对象。代码对象能够通过exec语句来执行或者eval()进行求值。
1、参数source:字符串或者AST(Abstract Syntax Trees)对象。
2、参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
3、参数model:指定编译代码的种类。可以指定为 ‘exec’,’eval’,’single’。
4、参数flag和dont_inherit:这两个参数暂不介绍
dir([object])
1、不带参数时,返回当前范围内的变量、方法和定义的类型列表;
2、带参数时,返回参数的属性、方法列表。
3、如果参数包含方法__dir__(),该方法将被调用。当参数为实例时。
4、如果参数不包含__dir__(),该方法将最大限度地收集参数信息
delattr(object, name)
删除object对象名为name的属性
eval(expression [, globals [, locals]])
计算表达式expression的值
execfile(filename [, globals [, locals]])
用法类似exec(),不同的是execfile的参数filename为文件名,而exec的参数为字符串.
getattr(object, name [, defalut])
获取一个类的属性
globals()
返回一个描述当前全局符号表的字典
hasattr(object, name)
判断对象object是否包含名为name的特性
hash(object)
如果对象object为哈希表类型,返回对象object的哈希值
isinstance(object, classinfo)
判断object是否是class的实例
issubclass(class, classinfo)
判断是否是子类
**len(s) **
返回集合长度
**locals() **
返回当前的变量列表699
**memoryview(obj) **
返回一个内存镜像类型的对象
**next(iterator[, default]) **
类似于iterator.next()
**object() **
基类
**property([fget[, fset[, fdel[, doc]]]]) **
属性访问的包装类,设置后可以通过c.x=value等来访问setter和getter
**reload(module) **
重新加载模块
setattr(object, name, value)
设置属性值
**repr(object) **
将一个对象变幻为可打印的格式
slice(start,end)
方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素。
staticmethod
声明静态方法,是个注解
**super(type[, object-or-type]) **
引用父类
type(object)
返回该object的类型
**vars([object]) **
返回对象的变量,若无参数与dict()方法类似
bytearray([source [, encoding [, errors]]])
返回一个byte数组
1、如果source为整数,则返回一个长度为source的初始化数组;
2、如果source为字符串,则按照指定的encoding将字符串转换为字节序列;
3、如果source为可迭代类型,则元素必须为[0 ,255]中的整数;
4、如果source为与buffer接口一致的对象,则此对象也可以被用于初始化bytearray.
**zip([iterable, ...]) **
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一个对象
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped) # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
>>>
五. IO操作
file(filename [, mode [, bufsize]])
file类型的构造函数,作用为打开一个文件,如果文件不存在且mode为写或追加时,文件将被创建。添加‘b’到mode参数中,将对文件以二进制形式操作。添加‘+’到mode参数中,将允许对文件同时进行读写操作
1、参数filename:文件名称。
2、参数mode:\'r\'(读)、\'w\'(写)、\'a\'(追加)。
3、参数bufsize:如果为0表示不进行缓冲,如果为1表示进行行缓冲,如果是一个大于1的数表示缓冲区的大小 。
**input([prompt]) **
获取用户输入
推荐使用raw_input,因为该函数将不会捕获用户的错误输入
**open(name[, mode[, buffering]]) **
打开文件
与file有什么不同?推荐使用open
打印函数
**raw_input([prompt]) **
设置输入,输入都是作为字符串处理
其他
help()--帮助信息