函数-装饰器基础知识+推导式

装饰器:    在不改变原函数代码基础上,为原函数扩展功能

    不带参数的装饰器

装饰器格式:
##装饰器的编写(函数的嵌套,外城函数返回内城函数):
def wrapper (funk):
    def inner (*args,**kwags):
        #自定义共能,根据功能在funk函数执行前后展现对应将其放在funk()前后
        pass(自定义功能)
        data = funk(*args,**kwargs)
        return data  #调用被装饰的函数并返回其值
        #若是return funk 是返回funk代指的函数
    return inner
##装饰器的使用:
@wrapper  #@外层函数
def index(*args,**kwargs):
    pass
index()
    

@wrapper:1.执行wrapper函数以index函数为参数(即func指向index):wrapper(index)

      2.执行完外城函数后将内城函数返回,赋值给index变量,此时index不在指向原先指向的函数,而是指向内层函数

     带参数的装饰器

image

 

 

 推导式:

    列表推导式:   v  = [for循环中的变量  for循环一个可迭代对象]  中间没有用逗号隔开              eg:v = [i for i in range(10)]

           v = [for循环中的变量  for循环一个可迭代对象  if条件]  if条件满足加到列表中     eg:  v = [i for i in range(10) if i>10]

            

面试题1:
v = [lambda x:x*i for i in range(10)]
v[0](2)
print(v)  #v列表里面放着10个匿名函数,没有被执行且i循环完后为9
print(v[0](2))  #执行匿名函数且参数x = 2  >>>18

面试题2:
def num():
    return [lambda x:x*i for i in range(4)]
v = [m(2) for m in num()]  #调用num得到含有匿名函数的列表且i=3,for循环此列表,m(2)作为列表v的元素
print(v)>>>[6, 6, 6, 6]

     集合推导式:  v = {for循环中的变量  for循环一个可迭代对象}    得到一个集合

     列表推导式:  v = {"k" + str(i) : i   for i in range(10)}    #“k"+str(i) 是字符串的拼接      #注意集合,字典中不是所有数据类型都能作其元素

posted @ 2025-10-02 20:57  guohan  阅读(6)  评论(0)    收藏  举报