Python学习-day4
学习装饰器,首先听haifeng老师讲解了一下准备知识。
1.函数即变量
2.高阶函数+嵌套函数==》装饰器
装饰器的作用是在,1)不改变源代码,2)不改变原函数的调用方式的前提下为函数增加新的功能。
首先学习了最基本的装饰器
使用方法:在原先函数定义的上方加入@wrapper语法糖,等价于 func = wrapper(func)
如果原函数带参数,则在第二层函数加入(*args,**kwargs)
如果装饰器也需要带参数,则需要再次嵌套一层,并且参数传递的顺序为:
def deco(args):
def first(args):
def second(args):
return second
return first
@deco(args) #args --> 装饰器第一层
def func(args): #func --> 装饰器第二层 args --> 装饰器第三层
pass
- #Authon Ivor
- import time
- #装饰器
- def timer(func):
- def deco(*args,**kwargs):
- start_time = time.time()
- func(*args,**kwargs)
- stop_time = time.time()
- print("The program cost %s" % (stop_time-start_time))
- return deco
- #装饰方法
- @timer # 等价于 test1 = timer(test1)
- def test1():
- time.sleep(1.5)
- print("I'm in the test1 !")
- @timer
- def test2(name,age):
- time.sleep(0.5)
- print("%s's age is %s" % (name,age))
- test1()
- test2("Ivor",25)
下面是武sir的博客,是高阶装饰器的一个小例子
- #!/usr/bin/env python
- #coding:utf-8
- def Before(request,kargs):
- print 'before'
- def After(request,kargs):
- print 'after'
- def Filter(before_func,after_func):
- def outer(main_func):
- def wrapper(request,kargs):
- before_result = before_func(request,kargs)
- if(before_result != None):
- return before_result;
- main_result = main_func(request,kargs)
- if(main_result != None):
- return main_result;
- after_result = after_func(request,kargs)
- if(after_result != None):
- return after_result;
- return wrapper
- return outer
- @Filter(Before, After)
- def Index(request,kargs):
- print 'index'
列表生成器、可迭代对象、迭代器
- #列表生成器
- #[i for i in range(100)]
- #生成器
- #(i for i in range(100))
- #生成器只有在调用的时候才会生成相应的数据
- #只记录当前的位置
- #只有一个__next__()方法
- #可迭代对象
- #from collections import Iterable
- #isinstance([],Iterable)
- #列表,字典,元组等都是可迭代对象
- #迭代器
- #有next方法的才是迭代器
- #能用for循环的都是可迭代对象
- #能用next方法的都是迭代器对象
协程,简单消费者模型
- #Authon Ivor
- import time
- def consumer(name):
- print("我准备吃包子啦!")
- while True:
- baozi = yield
- print("包子(%s)来了,(%s)吃掉了!" % (baozi,name))
- def producer():
- c1 = consumer("A")
- c2 = consumer("B")
- c1.__next__()
- c2.__next__()
- print("我开始做包子了!")
- for i in range(10):
- print("做好了一个!")
- time.sleep(1)
- c1.send(i)
- c2.send(i)
- producer()
斐波那契数列
- #Authon Ivor
- def fib(max):
- n,a,b=0,0,1
- for n in range(max):
- yield b
- a,b=b,a+b
- return "done"
- f = fib(15)
- for i in f:
- print(i)
Python学习-day4的更多相关文章
- python学习day4软件目录结构规范
为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...
- Python学习day4 数据类型Ⅱ(列表,元祖)
day4 知识补充&数据类型:列表,元祖 1.知识补充 1.编译型/解释型 编译型:在代码编写完成之后编译器将其变成另外一个文件教给你算计执行. 代表语言:Java,c,c++ ,c#, Go ...
- python学习day4 数据类型 if语句
1.变量的内存管理 cpython解释器垃圾回收机制 什么是垃圾,当一个值身上没有绑定变量名时,(该值的引用计数=0时)就是一个垃圾 age=18 #18的引用计数=1 x=age #18的引用计数 ...
- python学习day4之路文件的序列化和反序列化
json和pickle序列化和反序列化 json是用来实现不同程序之间的文件交互,由于不同程序之间需要进行文件信息交互,由于用python写的代码可能要与其他语言写的代码进行数据传输,json支持所有 ...
- python学习day4之路
装饰器(http://egon09.blog.51cto.com/9161406/1836763) 1.装饰器:本质是函数: 装饰器(装饰其他函数),就是为其他函数添加附加功能: 原则:1.不能修改被 ...
- python学习day4
目录 一.迭代器 二.yield生成器 三.装饰器 四.递归 五.基础算法 迭代器 #1.在不使用for循环的情况下 li = [11 ,22, 33, 44] #count = len(li) #s ...
- python学习Day4 流程控制(if分支,while循环,for循环)
复习 1.变量名命名规范 -- 1.只能由数字.字母 及 _ 组成 -- 2.不能以数字开头 -- 3.不能与系统关键字重名 -- 4._开头有特殊含义 -- 5.__开头__结尾的变量,魔法变量 - ...
- python学习 day4 (3月5日)---列表
列表: 容器性数据 有序 可更改 大量数据 一.增 1.追加 append(objcet) 2.索引增加 Insert(index,元素) 3.迭代追加 extend(object) ...
- Python学习笔记,day4
Python学习第四天 一.装饰器 函数调用顺序: 其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用 高阶函数: 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入 ...
随机推荐
- 帝国empirecms数据库数据表详细说明
表名 解释 phome_ecms_infoclass_news 新闻采集规则记录表 phome_ecms_infotmp_news 采集临时表 phome_ecms_news 新闻主数据记录表 p ...
- ios uilabel 根据文字 计算宽度 高度
//根据宽度求高度 + (CGFloat)getLabelHeightWithText:(NSString *)text width:(CGFloat)width font: (CGFl ...
- 看动画,秒懂人工智能&物联网
- 排序算法C语言实现
大学有一门课程叫做数据结构,严蔚敏的课本,其中详细介绍了集中经典的排序算法,学习复习反复几次,但是直到现在仍然只记得名字了,所以想记录下来,随时复习直至牢记于心.经常面试的朋友知道,排序算法在面试中出 ...
- codeforecs Gym 100286B Blind Walk
交互式程序,要用到一个函数fflush,它的作用是对标准输出流的清理,对stdout来说是及时地打印数据到屏幕上,一个事实:标准输出是以『行』为单位进行的,也即碰到\n才打印数据到屏幕.这就可能造成延 ...
- 两个有序数列,求中间值 Median of Two Sorted Arrays
原题: There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the ...
- c++链表-双向链表+增删查改
基于双向链表的增删改查和排序(C++实现) 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前 ...
- python 函数内使用全局变量
x = def change_global(): global x x = x + change_global() print(x) result: 2
- Python——字典dict()详解
一.字典 字典是Python提供的一种数据类型,用于存放有映射关系的数据,字典相当于两组数据,其中一组是key,是关键数据(程序对字典的操作都是基于key),另一组数据是value,可以通过key来进 ...
- 类库日期和jsp导包
一.日期类库 1.1. Date Date类创建一个时间,或者是创建一个与你计算机当前的时间:精确到毫秒. //实例化时间类 Date date = new Date(); 1.2.格式转换类 1.2 ...