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 不允许在函数未声明之前,对其进行引用或者调用 高阶函数: 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入 ...
随机推荐
- 零基础逆向工程12_C语言06_switch语句反汇编
12_C语言06_switch语句反汇编 switch语句反汇编 测试环境:VC++6.0 分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表. ...
- Eclipse IDE配置PHP开发、调试环境
前言 使用java语言开发的朋友想必对Eclipse开发工具已经不陌生了,那么Eclipse作为java主流的开发工具,是否能够开发PHP项目呢?答案如你所想,肯定是可以的!以下就是该IDE下如何配置 ...
- Protocol Buffer学习教程之编译器与类文件(三)
Protocol Buffer学习教程之编译器与类文件(三) 1. 概述 在前面两篇中,介绍了Protobuf的基本概念.应用场景.与protobuf的语法等.在此篇中将介绍如何自己编译protobu ...
- UWP开发:存储容器设置&复合设置数据
有时候为了将应用设置进行分类,需要创建新的容器进行存储应用设置的信息. 1,容器的创建:在一个根容器里嵌套一个新容器 1)首先获取根容器. 2)调用ApplicationDataContainer.C ...
- JavaScript对象属性
JavaScript对象的属性有两类:数据属性和访问器属性 数据属性 数据属性有四个特性,分别为: [[value]]属性的值 [[writeable]]属性是否可以修改 [[enumerable]] ...
- code Gym 100500D T-shirts(暴力)
因为只能买一次,暴力枚举一下买的衣服的大小. #include<cstdio> #include<map> #include<algorithm> using na ...
- 解决ubuntu上ifconfig没有eth0/ens33且无法上网的问题
ifconfig只有一个轮回端口lo,没有我们的网卡eth0,一开始以为是vsphere(新手对于vsphere不是很熟悉)上我的虚拟机配置问题,还查看了相关的网络配置,后来才知道是因为: 问题出在配 ...
- 用简单的语言描述C++ 是什么?
用简单的语言描述C++ 是什么? 答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛.C++支持多种编程范式 --面向对象编程.泛型编程和过程化编程. 其编程领域众广,常用于系统开发,引 ...
- 变量赋值理解--Pyton中让两个值互换的方法
#Pyton中让两个值互换的方法 #方法一:可以理解为相当于是同时赋值 a = 5 b = 4 a,b = b,a print(a,b) #方法二:可以理解为拿箱子过程 c = 10 d = 20 e ...
- Markdown中如何添加特殊符号
符号 说明 编码 符号 说明 编码 符号 说明 编码 " 双引号 " × 乘号 × ← 向左箭头 ← & AND符号 & ÷ 除号 ÷ ↑ 向上箭头 ↑ < ...