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

 

posted @ 2022-07-23 14:15  多测师_树哥  阅读(55)  评论(0编辑  收藏  举报