Python 常用的特殊函数
2016-03-16 11:44
405 查看
lambda
匿名函数lambda x: x * x 实际就是 def f(x): return x * x
map
map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回def a(x): return x*2 print map(a, [1, 2, 3, 4]) #结果 [2, 4, 6, 8]
or lambda
print map(lambda x: x*2, [1, 2, 3, 4]) #结果 [2, 4, 6, 8]
reduce
reduce把结果继续和序列的下一个元素做累积计算def b(x, y): return x * y print reduce(b, [1, 2, 3, 4]) #结果 24
or lambda
print reduce(lambda x, y: x * y, [1, 2, 3, 4]) #结果 24
#流程 1, 1*2 = 2 2, 2*3 = 6 3, 6*4 = 24
filter
filter()函数用于过滤序列过滤小于2的数
def c(x): return x>=2 print filter(c, [None, 1, 2, 3, 4]) #结果 [2, 3, 4]
or lambda
print filter(lambda x: x>=2, [None, 1, 2, 3, 4]) #结果 [2, 3, 4]
过滤None的数据
print filter(None, [None, 1, 2, 3, 4]) #结果 [1,2, 3, 4]
sorted
序列排序print sorted([11, 21, 3, 4]) #结果 [3, 4, 11, 21]
对象排序
class C1(object): def __init__(self, age): self.age = age def __cmp__(self, y): return self.age > y.age and 1 or -1 def __str__(self): return str(self.age) c1 = [C1(11), C1(21), C1(2), C1(1)] print [c.age for c in c1] #C1 必须实现__cmp__方法 c2 = sorted(c1) c3 = sorted(c1, lambda x,y: x.age > y.age and 1 or -1) print [c.age for c in c2] print [c.age for c in c3]
partial
functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。from functools import partial class A1(object): def __init__(self, name): self.name = name class B1(object): def __init__(self, name): self.name = name a1 = A1("A1") b1 = B1("B1") def get_field(obj, field): return getattr(obj, field) c = partial(get_field, field="name") d = partial(lambda obj, field: getattr(obj, field), field="name") #get_field(a1, "name") == c == d print get_field(a1, "name") print c(a1) print d(a1) 结果 A1 A1 A1
property
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数为了限制属性的范围,可以吧属性设置成私有的,在通过一个set_属性()方法来设置属性,通过一个get_属性()来获取属性,这样,在set_属性()方法里,就可以检查参数
class D1(object): def __init__(self, age): self.__age = age def get_age(self): return self.__age def set_age(self, age): if not isinstance(age, int): raise ValueError('age must be an integer!') self.__age = age d1 = D1(11) print d1.get_age() d1.set_age(22222) print d1.get_age()
装饰器
class D1(object): def __init__(self, age): self.__age = age @property def age(self): return self.__age @age.setter def age(self, age): if not isinstance(age, int): raise ValueError('age must be an integer!') self.__age = age def get_age(self): return self.__age d1 = D1(11) print d1.age d1.age = 222 print d1.age print d1.get_age()
or
class D1(object): def __init__(self, age): self.__age = age def __set_age(self, age): if not isinstance(age, int): raise ValueError('age must be an integer!') self.__age = age def __get_age(self): return self.__age age = property(__get_age, __set_age) del __get_age, __set_age d1 = D1(11) print d1.age d1.age = 100 print d1.age
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法