学习python课程第十二天

一。 装饰器:

1 什么是装饰器    器=>工具    装饰=>指的是为被装饰对象添加新功能

装饰器本身可以是任意可调用的对象=>函数    被装饰的对象也可以是任意可调用的对象=>函数

目标:写一个函数来为另外一个函数添加新功能

2 为何要用装饰器    开放封闭原则: 软件一旦上线就应该对修改封闭,对扩展开放        对修改封闭:            1. 不能修改功能的源代码            2. 也不能修改功能的调用方式

对扩展开发:            可以为原有的功能添加新的功能

装饰器就是要在不修改功能源代码以及调用方式的前提下为原功能添加额外新的功能3 如何用装饰器

‘‘‘import time

def index():    print(‘welcome to index page‘)    time.sleep(3)

def outter(func):    # func=最原始那个index的内存地址    def wrapper():        start=time.time()        func() # 最原始那个index的内存地址()        stop=time.time()        print(‘run time is %s‘ %(stop-start))    return wrapper

index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址index() #wraper()

二。装饰器的修正:
import time

def index():    print(‘welcome to index page‘)    time.sleep(3)    return 123

#==============================================================def outter(func):    # func=最原始那个index的内存地址    def wrapper():        start=time.time()        res=func() # 最原始那个index的内存地址()        stop=time.time()        print(‘run time is %s‘ %(stop-start))        return res    return wrapper

index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址#==============================================================

res=index() #res=wraper()print(res)

三。装饰器的修正2:
import time

def index():    print(‘welcome to index page‘)    time.sleep(3)    return 123

def home(name):    print(‘welcome %s to home page‘ %name)    time.sleep(1)

#==============================================================def outter(func):    # func=最原始那个home的内地址    def wrapper(*args,**kwargs):        start=time.time()        res=func(*args,**kwargs)        stop=time.time()        print(‘run time is %s‘ %(stop-start))        return res    return wrapper

index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址home=outter(home) #index=outter(最原始那个home的内地址) #home=wrapper函数的内地址#==============================================================

home(‘egon‘) #wrapper(‘egon‘)index() #wrapper()

四。装饰器的语法糖:装饰器的名字,要在被装饰对象的正上方单独一行写上。
from functools import wraps

import timedef timmer(func): # func=最原始那个home的内地址    @wraps(func)    def wrapper(*args,**kwargs):        start=time.time()        res=func(*args,**kwargs)        stop=time.time()        print(‘run time is %s‘ %(stop-start))        return res    return wrapper

@timmerdef index():    """这是index功能"""    print(‘welcome to index page‘)    time.sleep(3)    return 123

@timmerdef home(name):    """这是home功能"""    print(‘welcome %s to home page‘ %name)    time.sleep(1)

print(help(index))print(index.__name__)

(经过处理。index.跟老的lindex的名字,注释。都完全相同)
五。有参数装饰器在函数内部需要一个参数,但是自己的参数不能改变的时候,就要在外面再包一层函数来传给需要参数的函数。

六。global与nonlocal:
x=1def func():   x=2

func()print(x)

x=[]def func():   x.append(1)   x.append(2)   x.append(3)

func()print(x)

global: 在局部声明变量是全局变量x=1def func():    global x    x=2

func()print(x)

nonlocal:在局部声明变量是外层函数的变量
x=333def f1():    x=222    def f2():        x=111        def f3():            nonlocal x            x=0        f3()        print(‘f2内部的x: ‘,x)    f2()    print(‘这是f1内部的x: ‘,x)

f1()print(x)


原文地址:https://www.cnblogs.com/lvyipin1/p/9715533.html

时间: 2024-10-03 04:46:52

学习python课程第十二天的相关文章

学习python课程第二十二天

一 .   类的继承与派生 : 1. 什么是继承: 在程序中继承是一种新建子类的方式, 新创建的类称之为子类,或者派生类. 被继承的类称之为父类, 继承描述的是一种遗传关系, 子类可以重用父类的属性. 2. 为何要用继承 : 继承可以减少类与类之间代码冗余的问题. 3. 如何继承 : 先抽象,再继承 抽象 :抽取出比较像的部分.. 最主要的作用是划分类别 (可以隔离关注点, 降低复杂度.) 继承 :是基于抽象的结果,通过编程语言去实现它. 肯定是先经历抽象这个过程,才能通过继承的方式去表示 出抽

【如何学习Python课程】

一.学习流程方法 1,学习流程方法. 按照视频流程走. 视频稍微有点基础,视频加快速度. 熟悉的同学. 记笔记的形式多 做作业遇到问题记下来,画流程图再写. 二.如何使你的python提高更快 2,如何使你的python提高更快. 调整听说读写顺序. 听.写.读.说 听:加速听 写:1,画流程图:2,写好代码的框架(最小可用原则,调试debug(往产品方向打造): 读:读别人代码和书.先定个小目标(读不下去也得读) 说:给别人讲一遍. 课余练习 1,有意识的和有目的进行练习掌握核心技能. 2,练

学习python课程第十九天

一.   各种序列化模块 一.  pickle 模块 pickle是一个用来序列化的模块 序列化是什么? 指的是将内存中的数据结构转化为一种中间格式, 并储存到硬盘上, 反序列化? 将硬盘上存储的中间格式数据在还原为内存中的数据结构 为什么要序列化? 就是为了将数据持久储存 之前学过的文件也能完成持久化存储, 但是操作起来非常麻烦 pickle模块的主要功能 dump   load   dumps   loads dump 是序列化.  load是反序列化 不带s的是帮你封装好 write 和

学习python课程第二十三天

一.    组合 : 1. 什么是组合 ? 一个对象的属性是来自于另外一个类的对象, 称之为组合. (跟继承其实很相似.都是共用一个类里面的属性) 2. 为何用组合 ? 组合也是用来解决类与类代码冗余的问题. 3. 如何用组合 ? class Foo: aaa=1111 def __init__(self,x,y): self.x=x self.y=y def func1(self): print('Foo内的功能') class Bar: bbb=2222 def __init__(self,

学习python课程第十五天

一. 什么是模块? 模块是一组相关功能的集合体,一个模块其实就是一个py文件, python中的一个功能就是一个函数. 例如:mymodule.py 文件名为 mymodule.py 模块名为 mymodule 模块也分为四类: 1,自定义模块 创建一个py文件.把一堆函数写进去就是一个模块. 2.c语言编写并连接到python解释器的内置模块 time模块. time.sleep()功能 等. 内置的模块能不能满足你所有的需求? 不可能. 所以你必然会自己定义模块 这时候就会出现这样一个情况

学习python课程第八天

一.文件操作: 1: 基本概念打开文件的模式有三种纯净模式:r(默认的) w a 控制操作文件内容格式的两种模式:t(默认的) b大前提: tb模式均不能单独使用,必须与纯净模式结合使用t文本模式: 1. 读写文件都是以字符串为单位的 2. 只能针对文本文件 3. 必须指定encoding参数b二进制模式: 1.读写文件都是以bytes/二进制为单位的 2. 可以针对所有文件 3. 一定不能指定encoding参数 2. 打开文件模式详解1. r只读模式: 在文件不存在时则报错,文件存在文件内指

学习python课程第十六天

一.    包: 1.什么是包: 包就是含有一个__init__.py文件的文件夹,它把所有模块都给组织起来. 强调:在python3中,即使没有__init__.py文件,也不会报错.但是在python2中就会报错. 创建包的目的不是为了运行, 而是被导入使用. 记住, 包只是模块的一种形式而已.包的本质就是一种模块. 2.为何要使用包: 1.包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来. 随着功能越写越多.我们无法将所有功能都放到一个文件中.于是我们使用模块去组织功能, 而

学习python课程第十八天

一. 常用模块: 1.  sys 模块 1.print(sys.path) #查看环境变量 2.print(sys.modules) #查看已经加载的模块 3.print(sys.argv) #获取终端调用时的参数 4.print(sys.version) #获取解释器的版本信息 5.print(sys.platform) #当前平台的名称 6.sys.exit(0) #正常结束程序,后面的参数必须传整型. 了解: print(sys.api_version) #接口的版本 print(sys.

学习python课程第二十天

一.     logging模块 1.  日志的级别分别有: logging.debug  (''这是一个调试信息'')  #10 级别最低 logging.info  ('一些常规的信息')  #20 logging.warning  ('警告信息')  #30 logging.error  ('错误信息')  #40 logging.critical  ('严重错误')  #50 #  在logging模块中又对应的常量用来表示级别 默认情况下  默认级别是#30  waming  日志输出