匿名函数
lambda函数是一种快速定义单元的最小函数,可以用在任何需要函数的地方。
例如:
使用正常函数
In [6]: def fun(x,y):
...: return x*y
...:
In [7]: fun(3,5)
Out[7]: 15
使用匿名函数,其中x,y后面的冒号是表示return的意思
In [9]: r=lambda x,y:x*y
In [10]: r(3,5)
Out[10]: 15
lambda匿名函数的优点:
1、可以省去定义函数的过程,让代码更加精简。
2、对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题
3.某些地方使用lmbda可以让代码更容易理解
lambda基础:
lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。
lambda语句构建的其实是一个函数对象
lambda使用
In [12]: r=lambda x,y:x*y
In [13]: r(3,5)
Out[13]: 15
使用函数可以用到reduce函数:
reduce需要2个参数,第一个是函数,第二个是实际参数
使用正常函数:
In [15]: def add(x,y):
....: return x+y
....:
In [16]: reduce(add,range(1,101))
Out[16]: 5050
使用匿名函数:
In [18]: reduce(lambda x,y:x+y,range(1,101))
Out[18]: 5050
常用的内建函数
取绝对值:abs
In [20]: abs(2)
Out[20]: 2
In [21]: abs(-2)
Out[21]: 2
取最大值和最小值:max min
In [22]: max([1,2,3])
Out[22]: 3
In [23]: min([1,2,3])
Out[23]: 1
可以比较可迭代对象
In [24]: max('abc','123a',11)
Out[24]: 'abc'
取字符长度:len()
得商取余的函数:divmod()
In [26]: divmod(5,2) #5除2 等于2余1
Out[26]: (2, 1)
函数:pow() ,2个参数时,代表几次方,3个参数代表先去方数,然后取余数
In [29]: pow(2,3)
Out[29]: 8
#2**3/3
In [30]: pow(2,3,3)
Out[30]: 2
四舍五入函数:round()
In [8]: round(12.5)
Out[8]: 13.0
第二个参数代表保留几个小数
In [36]: round(12.52124,2)
Out[36]: 12.52
判断一个对象是否可调用:callable() 返回是一个布尔值
判断一个对象类型:type()
判断是否是一个对象类型:isinstance()
In [42]: l=[1,2]
In [43]: isinstance(l,list)
Out[43]: True
In [14]: a=‘123’
In [15]: isinstance(a,str)
Out[15]: True
比较大小函数,前面比后面大就返回1,反之为-1,等于为0
In [44]: cmp(11,1)
Out[44]: 1
如果比较字符串的话,是看首字母在前还是在后
比如 z开头的字母就比h开头的字母大
返回数字列表:range(),返回对象:xrange()
In [49]: range(10)
Out[49]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
类型转换函数
转成整数类型:int()
转成长整型:long()
转成浮点型:float()
转化为复数:complex
转成字符串:str()
转成列表:list()
In [52]: list(‘123’)
Out[52]: [‘1’, ‘2’, ‘3’]
转成元组:tuple()
In [53]: tuple(‘123’)
Out[53]: (‘1’, ‘2’, ‘3’)
转成16进制的字符串:
hex() 参数只能是整数
将16进制或者字符串当成有效表达式求值:
eval() 参数只能是字符串
In [9]: eval("[‘a’,‘b’,‘c’]")
Out[9]: [‘a’, ‘b’, ‘c’]
转成8进制的字符串:oct()
转成阿斯克码字符:chr() 输入数字在0到255之间
ord() 函数跟chr()函数相反
字符串处理函数
将对象的字符串首字母转化为大写 a.capitalize()
In [60]: a='hello'
In [62]: a.capitalize()
Out[62]: 'Hello'
字符串对象替换 a.replace()
In [64]: a.replace('h','H')
Out[64]: 'Hello
In [68]: b='hello,h'
替换2个h
In [69]: b.replace('h','H',2)
Out[69]: 'Hello,H'
替换1个h
In [70]: b.replace('h','H',1)
Out[70]: 'Hello,h'
将字符串切分成列表:a.split()
默认按空格切分
In [10]: a.split()
Out[10]: ['hello,h']
用 .来切分字符
In [11]: b='192.168.1.204'
In [13]: b.split('.')
Out[13]: ['192', '168', '1', '204']
用.来切分,并且只切分一次
In [14]: b.split('.',1)
Out[14]: ['192', '168.1.204']
连接可迭代函数:join()
#通过abc去连接字符串
In [15]: s1='abc'
In [16]: s1.join('12')
Out[16]: '1abc2'
In [17]: s1.join('123')
Out[17]: '1abc2abc3'
In [18]: s1.join('1234')
Out[18]: '1abc2abc3abc4'
以‘-’为连接符
In [20]: '-'.join([str(i) for i in range(10)])
Out[20]: '0-1-2-3-4-5-6-7-8-9'
string 模块:
import string
打印所有小写:
In [33]: string.lowercase
Out[33]: ‘abcdefghijklmnopqrstuvwxyz’
打印所有大写:
In [34]: string.uppercase
Out[34]: ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
序列处理函数:
len(),max(),min(),filter(),zip(),map(),reduce()
过滤函数:filter()
None就是什么都不做的意思,下面就是不对’abc‘做任何处理
In [40]: filter(None,'abc')
Out[40]: 'abc'
In [26]: def f(x):
if x % 2 ==0:
return True
余数为0的就打印,初步过滤
In [27]: filter(f,range(10))
Out[27]: [0, 2, 4, 6, 8]
也可以利用匿名函数处理
In [54]: filter(lambda x:x%2==0, range(1,10))
Out[54]: [2, 4, 6, 8]
处理多个序列,整合成一个大序列:zip()
In [28]: l1=[1,2,3]
In [30]: l2=['a','b','c']
In [31]: zip(l1,l2)
Out[31]: [(1, 'a'), (2, 'b'), (3, 'c')]
map()方法传入函数或者None
没有数据的时候就填充None
In [41]: map(None,l1,l2,l3)
Out[41]: [(1, 'a', 3), (2, 'b', 5), (3, 'c', None)]
传入乘方的函数
In [45]: l1
Out[45]: [1, 2, 3]
In [42]: def f(x):
....: return x**2
In [44]: map(f,l1)
Out[44]: [1, 4, 9]
传入相乘的函数
In [48]: l2=[4,5,6]
In [46]: def f(x,y):
....: return x*y
In [49]: map(f,l1,l2)
Out[49]: [4, 10, 18]
对序列值的值做处理 :reduce()
In [52]: def fun(x,y):
return x+y
....:
In [53]: reduce(fun,range(1,101))
Out[53]: 5050
使用lambda匿名函数:
In [54]: filter(lambda x:x%2 ==0,range(10))
Out[54]: [0, 2, 4, 6, 8]
列表表达式:
这样可以将for循环的数据进行修改,列表重写.
In [57]: [i for i in range(10)]
Out[57]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [58]: [i for i in range(10) if i%3==0]
Out[58]: [0, 3, 6, 9]