装饰器&推导式

  • 传参位置参数在前,关键词参数在后

  • 函数不被调用内部代码不被执行

  • 函数在被调用的时候,每次都会开辟一个新的内存地址,互不干扰

    #经典案例
    def func(num):
    def inner():
    print(num)
    return inner
    result = []
    for i in range(10):
    f = func(i)
    result.append(f)
    v1 = result[0]()
    v2 = result[9]()
    print(v1,v2)

1.装饰器

  • 装饰器:在不改变原函数内部代码也不改变调用方式的基础上,在执行函数之前和之后自动执行某个功能.

1.1基本结构

def 外层函数(参数):
def 内层函数(*args,**kwargs);
return 参数(*args,**kwargs)
return 内层函数
@外层函数
def index()
pass
#示例:
def func(arg):
def inner():
v = arg()
return v
return inner
@func
def index():
print(123)
return 666 print(index)
  • @func :执行func函数把下面色函数当做参数传递,相当于:func(index)
  • 将外层函数的返回值(内层函数)重新赋值给下面的函数名index,index = func(index)

1.2装饰器基本应用

应用场景:想要为函数扩展功能时,使用装饰器

  • 计算运行时间

    • 时间模块:time.time()获取当前时间
    • time.sleep('秒数')睡眠
    # 计算函数执行时间
    
    def wrapper(func):
    def inner():
    start_time = time.time()
    v = func()
    end_time = time.time()
    print(end_time-start_time)
    return v
    return inner
    @wrapper
    def func1():
    time.sleep(2)
    print(123)
    @wrapper
    def func2():
    time.sleep(1)
    print(123)
    func1()

2.推导式

2.1列表推导式

  • 方便生成一个列表

  • 基本格式

    # 变量 = [元素 for 元素 in 可迭代对象]
    # 变量 = [元素 for 元素 in 可迭代对象 if 条件] **条件为True时元素才能添加到列表
    lis = [i for i in 'bigox']
    print(lis) lis = [i+100 for i in rang(10)]
    print(lis) lis = [99 if i>5 else 66 for i in range(10)]
    print(lis)
# 题
v8 = [lambda x:x*i for i in range(10)]
# 1.请问 v8 是什么?
# 2.请问 v8[0](2) 的结果是什么? # 题
def num():
return [lambda x:i*x for i in range(4)]
# num() -> [函数,函数,函数,函数]
print([ m(2) for m in num() ]) # [6,6,6,6]

2.2集合推导式

  • 参照列表推导式,注意集合不能重复

    # 变量 = {元素 for 元素 in 可迭代对象}
    # 变量 = {元素 for 元素 in 可迭代对象 if 条件} **条件为True时元素才能添加到列表

2.3字典推导式

  • 基本格式

    dic = {'k'+str(i) for i in range(10)}

小结

  • 装饰器

    • 书写格式
    • 原理
    • 应用格式
  • 推导式
  • 内置模块
    • time.time() 获取当前时间,具有返回值
    • time.sleep(秒数) 运行时驻留秒数

python学习 day13 装饰器(一)&推导式的更多相关文章

  1. python学习笔记--装饰器

    1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...

  2. oldboy s21day13装饰器和推导式

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 2.请为 func 函数编写一个装饰器,添加上装饰器后可以实现:执行func时,先输入"befor ...

  3. python 学习分享-装饰器篇

    本篇内容为偷窃的~哈哈,借用一下,我就是放在自己这里好看. 引用地址:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 第一步: ...

  4. python学习之装饰器-

    python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...

  5. python学习day14 装饰器(二)&模块

    装饰器(二)&模块 #普通装饰器基本格式 def wrapper(func): def inner(): pass return func() return inner def func(): ...

  6. Python学习 :装饰器

    装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...

  7. python学习之-- 装饰器

    高阶函数+嵌套函数 == 装饰器 什么是装饰器: 其实也是一个函数. 功能:为其他的函数添加附加功能 原则:不能修改被装饰的函数的源代码和调用方式 学习装饰器前首先要明白以下3条事项: 1:函数 即 ...

  8. python 学习笔记二 (列表推导式)

    2018年年初写了第一篇博客,说要做一个认真的技术人 https://www.cnblogs.com/yingchen/p/8455507.html 今天已经是11月19日了,这是第二篇博客,看来坚持 ...

  9. Python学习笔记--装饰器的实验

    装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢? 我们实验一下,先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date ...

随机推荐

  1. MongoDB:配置与安装

    一.配置环境 1.1进行安装下载msi文件 需要注意的一点是,在安装过程中的图示界面不要勾选左下角“安装MongoDB可视化工具”.这是一个客户端管理工具,在后面会具体描述其功能.由于安装时间非常长, ...

  2. SQLServer数据库维护(一)碎片检查整理

    一.碎片查看维护 dbcc showcontig('表名') dbcc showcontig ('T_NOFITSTUDY') 结果如下: DBCC SHOWCONTIG 正在扫描 'T_NOFITS ...

  3. 高版本Sqlserver数据库导入低版本Sqlserver

    今天想跑一个关于java网站的demo,结果在附加数据库项这一块出现问题,例程的数据库用的是sqlserver2014,而我的是2008,添加数据库出现错误.经过一番查找,也找到某人写的一些博客上的解 ...

  4. AFNetworking源码浅析

    本文将从最简单的GET请求方法的使用入手,由表及里,逐步探究AFNetworking如何封装处理原生的网络请求. 一.AFNetworking的简单使用 -(void)getDemo{ AFHTTPS ...

  5. MySQL 数据表创建及管理

    use stuinfo; -- 指定当前数据库 CREATE table if not exists student1( -- 创建数据表student1 sNo ) not NULL, sName ...

  6. 使用time+dd测试硬盘读写速度

    命令:time dd if=/dev/zero bs=1M count=2048 of=direct_2G   此命令为在当前目录下新建一个2G的文件 Demo如下: 写速度: time dd if= ...

  7. [LeetCode] 10. 正则表达式匹配

    题目链接:https://leetcode-cn.com/problems/regular-expression-matching/ 题目描述: 给定一个字符串 (s) 和一个字符模式 (p).实现支 ...

  8. 19.java反射入门

    一.反射机制是什么反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  9. 2017-8-2新开了一个ABP交流的QQ群(291304962 ),欢迎加入

    因为ABP架构设计交流群人数一直爆满,很多想交流ABP的朋友无法加进群里, 刚新建了一个QQ群,群号291304962(ABP架构设计交流群3),欢迎对ABP感兴趣的朋友加入. 欢迎加QQ群: ABP ...

  10. nginx中的epoll模型

    要了解epoll模型,就要一个一个知识点由浅至深地去探索. 1.IO复用技术 IO流请求操作系统内核,有串行处理和并行处理两种概念. 串行处理是前面一个操作处理地时候,后面的所有操作都需要等待.因此, ...