装饰器和迭代器如何结合使用以优化代码结构?

2026-04-28 14:072阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计897个文字,预计阅读时间需要4分钟。

装饰器和迭代器如何结合使用以优化代码结构?

装饰器一. 装饰器简介+简单理解简单来说,装饰器就是在不改变函数内部逻辑的情况下,为函数添加新功能的逻辑。举例,辣条大家吃过吧,商家再将辣条卖出去时,会用不同的包装袋装辣条。

装饰器 一.装饰器简介

简单理解就是在不改动函数内部逻辑的同时为该函数添加新功能逻辑。举个例子,辣条大家都吃过吧,

商家再把辣条卖出去的同时会用不同的包装袋去包装辣条,这些不同的包装袋就是装饰辣条用的,但

是辣条的味道本质是未发生变化的。这就是装饰器的作用

二.函数装饰器的用法 1.装饰单个函数

def one(): print("我是one函数") def two(fun): print("开始运行befor") fun() print("结束运行after") two(one)

在使用装饰器前首先需要明白函数可以通过参数的形式去传递。上面代码中two函数就是一个简单的装饰器,

fun参数表示的是修饰的函数

2.修饰单个带参函数

def two(fun): def three(*args, **kwargs): print("开始运行befor") fun(*args, **kwargs) print("结束运行after") return three def one(name): print("我是log函数") one = two(one) one("李明")

two函数中返回的是three,在one=twp(one),也就相当于one为three函数来运行。这里简单介绍下*args,**kwargs作用。

*args:在运行函数传参时不确定传几个参数,可用*占位来代替未知数量参数

def one(*args, **kwargs):#args类型为元组 for i in args: print(i) one("李明", "王二", "张三")

**kwargs:当传入的是键值对格式的时候,可用kwargs

def one(*args, **kwargs):#kwargs为字典类型 for k, v in kwargs.items(): print("k", k, "v", v) one(name="李明", age=12, sex="男") 3.@键的使用

def two(fun): def three(*args, **kwargs): print("开始运行befor") fun(*args, **kwargs) print("结束运行after") return three @two def one(name): print("我是log函数") one("li")

我们可以看出,在被修饰的函数前加上@装饰器,可实现同样的效果,@two就相当于one=two(one)

4.带参的装饰器

def two_01(name): def two(fun): def three(*args, **kwargs): print("开始运行befor") fun(*args, **kwargs) print("结束运行after") return three return two @two_01("这里传入个参数即可") def one(): print("我是log函数") one() 二.类装饰器的用法 1.带参的函数

class one: def __init__(self, fun): self.fun = fun def __call__(self, *args, **kwargs): print("开始执行前置") self.fun() print("开始执行结尾") @one def two(): print("我是非常复杂的程序") two()

类装饰器中有两个函数init初始化,和call把类变成一个可调用的对象

2.带有参数的类装饰器

class one: def __init__(self, name): self.name = name def __call__(self, fun): def one_01(): print("开始执行前置") fun() print("开始执行结尾") return one_01 @one("李明") def two(): print("我是非常复杂的程序") two()

此时接收被装饰的函数就是call,

迭代器

迭代器有两个重要的方法iter和next,下面看下具体的用法

str = "1234" str = iter(str) #定义一个迭代器 print(next(str))#next为迭代下一个 print(next(str)) print(next(str))

其实除了iter()和next()外,for循环也可遍历

装饰器和迭代器如何结合使用以优化代码结构?

str = "1234" for i in str: print(i)

如何判断一个对象是否可迭代呢::isinstance()方法

from collections import Iterable str = "1234" print(isinstance(str,Iterable))

isinstance()里有两个参数,可判断两种参数类型是否相等,相等的话返回True,否则返回false

本文共计897个文字,预计阅读时间需要4分钟。

装饰器和迭代器如何结合使用以优化代码结构?

装饰器一. 装饰器简介+简单理解简单来说,装饰器就是在不改变函数内部逻辑的情况下,为函数添加新功能的逻辑。举例,辣条大家吃过吧,商家再将辣条卖出去时,会用不同的包装袋装辣条。

装饰器 一.装饰器简介

简单理解就是在不改动函数内部逻辑的同时为该函数添加新功能逻辑。举个例子,辣条大家都吃过吧,

商家再把辣条卖出去的同时会用不同的包装袋去包装辣条,这些不同的包装袋就是装饰辣条用的,但

是辣条的味道本质是未发生变化的。这就是装饰器的作用

二.函数装饰器的用法 1.装饰单个函数

def one(): print("我是one函数") def two(fun): print("开始运行befor") fun() print("结束运行after") two(one)

在使用装饰器前首先需要明白函数可以通过参数的形式去传递。上面代码中two函数就是一个简单的装饰器,

fun参数表示的是修饰的函数

2.修饰单个带参函数

def two(fun): def three(*args, **kwargs): print("开始运行befor") fun(*args, **kwargs) print("结束运行after") return three def one(name): print("我是log函数") one = two(one) one("李明")

two函数中返回的是three,在one=twp(one),也就相当于one为three函数来运行。这里简单介绍下*args,**kwargs作用。

*args:在运行函数传参时不确定传几个参数,可用*占位来代替未知数量参数

def one(*args, **kwargs):#args类型为元组 for i in args: print(i) one("李明", "王二", "张三")

**kwargs:当传入的是键值对格式的时候,可用kwargs

def one(*args, **kwargs):#kwargs为字典类型 for k, v in kwargs.items(): print("k", k, "v", v) one(name="李明", age=12, sex="男") 3.@键的使用

def two(fun): def three(*args, **kwargs): print("开始运行befor") fun(*args, **kwargs) print("结束运行after") return three @two def one(name): print("我是log函数") one("li")

我们可以看出,在被修饰的函数前加上@装饰器,可实现同样的效果,@two就相当于one=two(one)

4.带参的装饰器

def two_01(name): def two(fun): def three(*args, **kwargs): print("开始运行befor") fun(*args, **kwargs) print("结束运行after") return three return two @two_01("这里传入个参数即可") def one(): print("我是log函数") one() 二.类装饰器的用法 1.带参的函数

class one: def __init__(self, fun): self.fun = fun def __call__(self, *args, **kwargs): print("开始执行前置") self.fun() print("开始执行结尾") @one def two(): print("我是非常复杂的程序") two()

类装饰器中有两个函数init初始化,和call把类变成一个可调用的对象

2.带有参数的类装饰器

class one: def __init__(self, name): self.name = name def __call__(self, fun): def one_01(): print("开始执行前置") fun() print("开始执行结尾") return one_01 @one("李明") def two(): print("我是非常复杂的程序") two()

此时接收被装饰的函数就是call,

迭代器

迭代器有两个重要的方法iter和next,下面看下具体的用法

str = "1234" str = iter(str) #定义一个迭代器 print(next(str))#next为迭代下一个 print(next(str)) print(next(str))

其实除了iter()和next()外,for循环也可遍历

装饰器和迭代器如何结合使用以优化代码结构?

str = "1234" for i in str: print(i)

如何判断一个对象是否可迭代呢::isinstance()方法

from collections import Iterable str = "1234" print(isinstance(str,Iterable))

isinstance()里有两个参数,可判断两种参数类型是否相等,相等的话返回True,否则返回false