装饰器&推导式

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

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

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

    #经典案例
    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. 牛客网:Java重命名文件

    项目介绍 不管是C/C++还是JAVA,都可能生成一些持久性数据,我们可以将数据存储在文件或数据库中,此项目主要训练学习Java对本地磁盘的文件重命名,例如C:\nowcoder.txt重命名C:\n ...

  2. Linux命令学习总结:ls

    命令简介: ls命令用来列出目标目录(缺省的话为当前目录)中所有的子目录和文件.指令英文原义:list 指令所在路径:/bin/ls 执行权限:All User 命令语法: ls [OPTION].. ...

  3. 从0开始的Python学习005运算符与表达式

     地三鲜 土豆+茄子+青椒=地三鲜 这就是一个表达式,表达式是由运算符和操作数组成的. 土豆.茄子和青椒是操作数,炒是运算符,而地三鲜就是最后结果也就是这个表达式的值. 表达式 一个表达式可以分解为运 ...

  4. 不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。

    SQLServer数据库通常都不建议进行SHRINKFILE操作,因为SHRINKFILE不当会造成一定的性能问题. 但是当进行了某些操作(例如某个超大的日志类型表转成分区表切换了数据文件),数据库某 ...

  5. 报错:library not found for -lstdc++.6.0.9

    在Xcode 10开发中, 报错:library not found for -lstdc++.6.0.9 解决方案:将Xcode9的libstdc++6.0.9.tbd拷贝到Xcode10中使用 X ...

  6. Pycharm 消除波浪线

    转载:https://blog.csdn.net/youyouran12314/article/details/77719261 Pycharm环境下显示 在代码中显示许多波浪线,查看详情显示Spel ...

  7. Python操作db2

    官方文档:https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.5.0/com.ibm.db2.luw.apdv.python.doc/doc ...

  8. 【Linux基础】查看硬件信息-CPU

    1.物理CPU数:计算机上实际配置的CPU个数. //查看计算机物理CPU个数(必须先sort后uniq) cat /proc/cpuinfo | grep "physical id&quo ...

  9. nginx日志切割(logrotate或shell脚本)

    nginx自己不会对日志文件进行切割,可以通过两种不同的方式进行,分别是:通过logrotate和通过shell脚本. 如果是yum方式安装的nginx,系统默认会自动通过logrotate这个日志管 ...

  10. Docker 安装 MySQL

    1. docker search mysql 2.docker pull mysql/mysql-serer 3.mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/ ...