Python当中的内置函数lambda、filter、map、property、getattr等等【杭州多测师】【杭州多测师_王sir】
#getattr函数 #getattr() 函数用于返回一个对象属性值。 class Test(object): head = 1 def __init__(self,name): self.name = name @classmethod def func(cls): cls.num = 666 num1 = 888 t = Test('xiaowang') result = getattr(t,"head") print(result) #结果:1
#setattr函数 #setattr()函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。 class Test(object): head = 1 def __init__(self,name): self.name = name @classmethod def func(cls): cls.num = 666 num1 = 888 t = Test('xiaowang') setattr(t, 'age', 18) #给t这个对象设置age年龄字段为18岁 result = getattr(t,"age") print(result) #结果:18
#lambda函数是一个表达式,而不是一个语句 #求出1-100奇数之和 print(sum(list(filter(lambda x:x%2==1,range(1,101))))) #结果:2500 #求出1-100之和 from functools import reduce print(reduce(lambda x,y:x+y,range(1,101))) #结果:5050 t = lambda x,y,z: x+y+z print(t(1,2,3)) #6
#列表解析式 numbers = [number for number in range(10)] print(numbers) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #列表解析式求出1-100之类的奇数 result = [i for i in range(100) if i % 2 != 0] print(result) #列表解析式求出1-100之类的偶数 result1 = [i for i in range(100) if i % 2 ==0] print(result1) import random # #列表解析式生成100个0-1之间的随机数 t = [random.random() for x in range(100)] print(t) #嵌套列表是创建矩阵的常用方法 #外部列表解析式 [... for y in range(6)] 创建了六行,而内部列表 #解析式 [x for x in range(7)] 将用值填充这些行中的每一行 matrix = [[x for x in range(7)] for y in range(6)] print(matrix)
bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
# callable() 函数用于检查一个对象是否是可调用的。如果返回 # True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。 # 对于函数、方法、lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True。 class B: def __call__(self): return 0 print(callable(B)) #True
#classmethod 修饰符对应的函数不需要实例化 # 不需要 self 参数,但第一个参数需要是表示自身类 # 的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。 class A(object): bar = 1 def func1(self): print('foo') @classmethod def func2(cls): cls.num = 666 #定义一个类变量 print('func2') print(cls.bar) print(cls.num) cls().func1() # 调用 foo 方法 A.func2() # 不需要实例化
# delattr 函数用于删除属性。 # delattr(x, 'foobar') 相等于 del x.foobar。 class Test: x = 10 y = -5 z = 0 t = Test() print('x = ', t.x) print('y = ', t.y) print('z = ', t.z) delattr(Test, 'z') print('--删除 z 属性后--') print('x = ', t.x) print('y = ', t.y) # 触发错误 print('z = ', t.z)
# eval() 函数用来执行一个字符串表达式,并返回表达式的值。 n=81 print(eval("n + 4")) str="{'name':'xiaowang'}" result = eval(str) print(result,type(result)) #结果:{'name': 'xiaowang'} <class 'dict'>
#filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 #该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行 # 判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。 def test(n): return n % 2 == 1 #求出奇数 newlist = filter(test,[i for i in range(0,101)]) print(list(newlist)) #返回结果是1-100之间的奇数
#hasattr() 函数用于判断对象是否包含对应的属性。 class Test: x = 10 y = -5 z = 0 t = Test() print(hasattr(t, 'x')) print(hasattr(t, 'y')) print(hasattr(t, 'z')) print(hasattr(t, 'no')) # 没有该属性
# locals() 函数会以字典类型返回当前位置的全部局部变量。 # 对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。 def test(value): # 两个局部变量:arg、z z = 1 print (locals()) test(4) #结果:{'value': 4, 'z': 1}
# result = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) # print(list(result)) #结果:[3, 7, 11, 15, 19] # # def square(x) : # 计算平方数 # return x ** 2 # map(square, [1,2,3,4,5]) # 计算列表各个元素的平方 # print(list(map(square, [1,2,3,4,5]))) # 使用 list() 转换为列表 #结果:[1, 4, 9, 16, 25] # print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))) # 使用 lambda 匿名函数#结果:[1, 4, 9, 16, 25]
# next() 返回迭代器的下一个项目。 # next() 函数要和生成迭代器的 iter() 函数一起使用。 # 首先获得Iterator对象: it = iter([1, 2, 3, 4, 5]) # 循环: while True: try: # 获得下一个值: x = next(it) print(x) #结果:1-5 except StopIteration: # 遇到StopIteration就退出循环 break
#property() 函数的作用是在新式类中返回属性值。 class Test(object): def __init__(self): ''' fget -- 获取属性值的函数 fset -- 设置属性值的函数 fdel -- 删除属性值函数 doc -- 属性描述信息 ''' self._num = 666 @property def get_num(self): """Get the current voltage.""" return self._num t = Test() print(t.get_num) #直接通过对象t调用get_num函数名就可以了、不用加小括号结果:666
#range和xrange函数的区别 #xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。 #python3没有xrange python3的range和2以前的xrange功能一致,都是生成器。所以直接用range就可以了。 print(list(range(8))) #结果:[0, 1, 2, 3, 4, 5, 6, 7] for i in range(8): #结果:0 1 2 3 4 5 6 7 print(i,end=" ")
# reduce() 函数会对参数序列中元素进行累积。 # 函数将一个数据集合(链表,元组等)中的所有数据进行下列操作: # 用传给 reduce 中的函数 function(有两个参数)先对集合中的 # 第 1、2 个元素进行操作,得到的结果再与第三个数据用 # function 函数运算,最后得到一个结果。 from functools import reduce def add(x, y) : # 两数相加 return x + y sum1 = reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5 sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数 print(sum1) print(sum2)
# staticmethod 参数要求是 Callable, 也就是说 Class 也是可以的: class C1(object): @staticmethod class C2(object): def __init__(self, val = 1): self.val = val def shout(self): print("Python世界第%d!"%self.val) tmp = C1.C2(0) print(type(tmp)) # 输出 : <class '__main__.C1.C2'> tmp.shout() # 输出 : Python世界第0!
#cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, #如果 x == y 返回 0, 如果 x > y 返回 1。 import operator a = 5 b = 3 print(operator.lt(a, b))#False print(operator.le(a, b))#False print(operator.eq(a, b))#False print(operator.ne(a, b))#True print(operator.ge(a, b))#True print(operator.gt(a, b))#True print(operator.__lt__(a, b))#False print(operator.__le__(a, b))#False print(operator.__eq__(a, b))#False print(operator.__ne__(a, b))#True print(operator.__ge__(a, b))#True print(operator.__gt__(a, b))#True
#iter() 函数用来生成迭代器。 lst = [1, 2, 3] for i in iter(lst): print(i)
#compile() 函数将一个字符串编译为字节代码。 str = "for i in range(0,10): print(i)" c = compile(str,'','exec') exec(c) #结果:0-9 str = "3 * 4 + 5" a = compile(str,'','eval') print(eval(a)) #结果:17