python--装饰器、生成器、迭代器、元类

一、装饰器

def w1(func):def inner():func()return inner@w1
def f1():print('1111111')

1.只要python解释器执行到装饰器,就会自动进行装饰,而不是等到调用的时候才进行装饰。

2.有参数的函数,装饰器定义方法

def w1(func):def inner(*args, **kwargs):func()return inner@w1
def test1(a, b, c):print('1111')@w1
def test2(a, b, c, d):print('2222')#这样不管调用时传几个参数,都可以灵活使用,无需修改装饰器的形参

3.对函数中有返回值,装饰器定义的方法

def w1(func):def inner():return func()return inner@w1 test1():return ('1111')res = test1()
print(res)

4.通用装饰器  

def w1(func):def inner(*args, **kwargs):return func()return inner@w1
def test1():return ('1111')

5.数的装饰器

def func_arg(arg):def inner_func(func)def inner():func()return innerreturn func@func_art('1111')
def class():print('1111')test()

带有参数的装饰器能够起到在运行时,有不同的功能

二、生成器

  1.生成器的定义

# 第一种方式
a = (x for x in range(10))# 第二种方式
def func():a,b = 0,1for i in range(10):yield ba,b = b,a+b
生成器的定义

  2.生成器赋值问题

def test():i = 0while i<5:temp = yield iprint(temp)i +=1t = test()
t.__next__()    #一种迭代方式
next(t)            #第二种迭代方式
#在遍历过程中发现temp的值是None,即生成器未能给temp赋值,要解决这个问题可以用一下办法
t.send('111')    #在迭代的同时可以给temp赋值
生成器赋值问题

  3.多任务

def test1():while True:print('11111')yield Nonedef test2():while True:print('22222')yield Nonet1 = test1()
t2 = test2()while True:t1.__next__()t2.__next__()
多任务

三、迭代器

  1.判断是否可以迭代

from collections import Iterableisinstance(要判断的变量,Iterable)
判断是否可以迭代

  2.迭代器的定义

a = [11, 22, 33, 44]b = iter(a)
迭代器的定义

 四、类装饰器

  1.类装饰器的核心在于__call__方法见下例

class Test(object):def __init__(self, func):print('---初始化---')print('func name is %s'%func.__name__)self.__func = funcdef __call__(self):print('---装饰器中的功能---')self.__func()@Test
def test():print('---test---')    #结果:---初始化--- func name is test

test()    #结果:---装饰器中的功能---  ---test---
类装饰器

五、元类

  1.用type创建类:type(类名, 由父类名称组成的元组(针对继承的情况,可以为空),包含属性的字典(名称和值)),定义方法可以先定义一个函数,然后把 函数的引用存在字典里

  2.__metaclass__属性:在类中添加该属性 __metaclass__ = xxx(python2)  决定了该类是有什么创建的

    python3中用法:class Test(object, metaclass=xxx):

转载于:https://www.cnblogs.com/peilanluo/p/8284255.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scss的使用方式(环境搭建)

我用的是Koala。 IDE是intellij_idea&#xff08;其他IDE也可&#xff09; 下载Koala&#xff1a;http://koala-app.com/ 2.安装&#xff08;选好位置&#xff0c;下一步即可&#xff09; 3.打开Koala&#xff0c;创建项目 》创建css文件夹》创建XXX.scss文件&#xff0c;拖到…

小程序 按需_小程序想要留住用户需哪些举措?

**当下许多企业在进行长沙小程序开发后&#xff0c;都会费劲心思在推广引流上&#xff0c;很多企业也确实起到了不错的效果&#xff0c;用户们也是纷纷来到企业的小程序中。只不过有的小程序却无法将用户留下来&#xff0c;导致用户流失&#xff0c;令推广付之东流。下面长沙小…

渍渍渍~来一发豆瓣自动登录玩玩~

今天来一个比较屌的自动化登陆工具&#xff0c;selenium模块&#xff0c;这个模块&#xff0c;比较装逼啦~具体自行百度吧&#xff01;这篇博客实现了什么功能呢~可以自动使用用户名和密码登录&#xff0c;当然&#xff0c;豆瓣对登录次数还有ip地址做了一些策略&#xff0c;例…

Redis数据库入门学习(下载与安装、常用命令、在Java中操作Redis)

简介 下载与安装 数据类型 常用命令 1.字符串操作命令 2.哈希操作命令 3.列表操作命令 push是将元素总是插入到第一个 0表示第一个&#xff0c;1表示第二个。-1表示倒数第一个&#xff0c;-2表示倒数第二个。当前命令的意思是第一个到倒数第一个&#xff0c;即就是全部元素 rpo…

Java EE 7公共草案已发布。 我需要Java EE Light Profile!

2012年12月20日&#xff0c;Java EE 7的公共草案已上载。 乍一看&#xff0c;新规范是对Java EE 6中后续规范的改进。例如&#xff0c;我真的很喜欢Web Profile的想法。 遗憾的是它不是Java EE 6 Web Profile的一部分。 Web Profile是针对现代Web应用程序IMO的开发人员的&…

css入门基础知识

属性的值大于一个单词&#xff0c;要加上引号。 外部样式表<link href "mycss.css" type"text/css" rel "stylesheet">href是css文件&#xff0c;类型是text/css,rel是当前文档与外部文档的关系。 内部样式表<style>body{color:re…

.NET使用Office Open XML导出大量数据到 Excel

我相信很多人在做项目的都碰到过Excel数据导出的需求&#xff0c;我从最开始使用最原始的HTML拼接&#xff08;将需要导出的数据拼接成TABLE标签&#xff09;到后来happy的使用开源的NPOI, EPPlus等开源组件导出EXCEL&#xff0c;但不久前&#xff0c;我在一个项目碰到一个需求…

netapp管理地址_NetApp常用管理命令总结

一、系统相关&#xff1a;sysconfig -v查看硬件信息,主要显示了硬件平台、版本、序列号、适配器(网卡、光纤卡等)、硬盘等硬件信息sysconfig -r显示磁盘、raid、volume信息&#xff0c;等同于vol status -r-每个RAID会显示RAID的类型、RAID中每个磁盘是属于数据盘(data)、校验盘…

Java 8中的默认方法(Defender方法)简介

我们都知道Java中的接口仅包含方法声明&#xff0c;而没有实现&#xff0c;并且任何实现该接口的非抽象类都必须提供实现。 让我们看一个例子&#xff1a; public interface SimpleInterface {public void doSomeWork(); }class SimpleInterfaceImpl implements SimpleInterfa…

CSS自定义消息提示

1.效果 2.源码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><style type"text/css">#confirm{position: absolute;z-index: 1;display: inline-block;border: 1px solid black;backgr…

转 push本地代码到github出错

https://www.douban.com/note/332510501/ 刚创建的github版本库&#xff0c;在push代码时出错&#xff1a;$ git push -u origin masterTo gitgithub.com:******/Demo.git! [rejected] master -> master (non-fast-forward)error: failed to push some refs to gitgithub.co…

go语音实战读后感——一

1、第一个go程序&#xff1a; package mainimport ("fmt" )func main() {fmt.Println("Hello go") } 解析&#xff1a;package引进go程序组织包&#xff0c;通过import导入外部代码&#xff0c;标准库中的fmt包用于格式化并输出;通过main主函数进行执行程序…

file 选择的文件胖多有多大_如何删除 macOS 压缩包中的隐藏文件?

如何删除 macOS 压缩包中的隐藏文件&#xff1f;在工作中&#xff0c;压缩打包文件是不可缺少的一项工作。为了避免文件的损坏和缺失&#xff0c;我们通常在macOS系统中&#xff0c;把多个文件或文件夹压缩后进行传输&#xff0c;我们一般使用访达&#xff08;Finder&#xff0…

使用Camel在来自不同来源的Solr中索引数据

Apache Solr是建立在Lucene之上的“流行的&#xff0c;快速的开源企业搜索平台”。 为了进行搜索&#xff08;并查找结果&#xff09;&#xff0c;通常需要从不同的来源&#xff08;例如内容管理系统&#xff0c;关系数据库&#xff0c;旧系统&#xff09;中提取数据&#xff0…

CSS画各种二维图形

1.效果 2.源码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><style type"text/css">#triangle_top{display: inline-block;width:0;height:0;border-left:50px solid transparent;bor…

成都网站建设企业网站备案需要哪些资料?

一、企业备案所需资料&#xff1a;①主办单位有效证件扫描件&#xff08;营业执照&#xff09;&#xff1b;②主办单位负责人有效证件复印件&#xff08;身份证&#xff09;&#xff1b;③主办单位负责人法人授权书扫描件&#xff08;主体负责人是法人&#xff0c;这个就不用上…

数据库的开启与关闭

今天&#xff0c;为了一些原因&#xff0c;要重启数据库&#xff0c;但因为当时安装的时候&#xff0c;同学随便装了&#xff0c;导致很多文件都找不到&#xff0c;想使用绝对路径重启数据的计划卡死在了路上。以下&#xff0c;我写下我的数据库开启、关闭的方法&#xff0c;方…

leetcode怎么用时间刷_刷完700多题后的首次总结:LeetCode应该怎么刷?

推荐观看&#xff1a;java技术进阶&#xff1a;膜拜&#xff01;字节大神总结的666页大师级算法宝典&#xff0c;分分钟团灭LeetCode​zhuanlan.zhihu.com2020最新马士兵老师联手左程云老师丨数据结构与算法丨面试BATJ必备​www.bilibili.com我是大二的时候开始接触LeetCode的&…

IntelliJ IDEA:使用Google Guava生成equals,hashCode和toString

问题 在Java领域&#xff0c;我们经常需要编写equals &#xff0c; hashCode和toString方法。 老实说&#xff0c;这通常只是一个样板义务。 得益于智能IDE&#xff0c;我们通常不再自己这样做。 我们只是让和IDE一起努力。 不过有一个问题。 生成的代码通常非常丑陋。 让我们…

css代码整理

width&#xff1a;&#xff08;宽度&#xff09; height&#xff1a;&#xff08;高度&#xff09; border&#xff1a;1px solid red&#xff1b;&#xff08;边框 &#xff1a;边框粗细 显示 颜色&#xff09; border-radius&#xff1a;10deg&#xff1b;&#xff08;边框…