您的位置:首页 > 编程语言 > Python开发

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 lambda