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 不允许在函数未声明之前,对其进行引用或者调用 高阶函数: 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入 ...
随机推荐
- 两个页面实现mui轮播图与选项卡结合
index.html页面 <!DOCTYPE html><html><head> <meta charset="utf-8"> &l ...
- 实现memcopy函数
实现memcopy函数: void * memcpy(void *dest, const void *src, unsigned int count); { if ((src == NULL) || ...
- 备份和导入Outlook 2016 电子邮件签名
在本文中,我将分享您在Outlook 2013和Outlook 2016中备份或导入签名的过程 在清除Outlook配置文件之前,请确保您通过在文件资源管理器中的配置文件中的APPDATA文件夹中复制 ...
- C# 向服务器上传文件(客服端winform、服务端web)
转载 首先写客服端,winform模拟一个post提交: /// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summa ...
- 【LeetCode】9 Palindrome Number 回文数判定
题目: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could neg ...
- 通用的MIME类型:application/octet-stream
按照内容类型排列的 Mime 类型列表 类型/子类型 扩展名 application/envoy evy application/fractals fif application/futurespla ...
- (原)IPhone开发时把ToolBar中的元素居中的技巧
在IPhone应用开发时,经常用到ToolBar,其中的控件通常都是居左,想让它居中就有点困难. 这里介绍一种方法: 将Flexible Space Bar Button Item从库中拖到位于控件左 ...
- 【Python全栈-JavaScript】JavaScript-字符串详解
JavaScript-字符串详解 预热:Number() 方法 <script> //重要等级 1,2,3,4,5 var s=10; //最高级别5 var s1=new Number( ...
- Luogu [P3367] 模板 并查集
[模板]并查集 题目详见:[[P3367][模板]并查集] (https://www.luogu.org/problemnew/show/P3367) 这是一道裸的并查集题目(要不然叫模板呢) 废话不 ...
- Spring多种方式实现依赖注入
平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ...