函数的作用域
是就近原则,从里往外找,如果自己函数里有,就拿过来
如果自己的函数里面没有的话,就去它父级函数里面找,父亲用不了儿子的,儿子可以用父亲的
函数只有被调用才会执行
# name = 'python'
# def warpper():#1
# name='吴冰'
# def deco():#2
# name ='陈冬瓜'
# def hhh():#3
# name = '张莹'
# print('xxx%s'%name)
# print('我在里面%s'%name)
# hhh()
# deco()
# print('外面的name是%s'%name)
# warpper() 装饰器
#1、函数里面也可以嵌套的定义一个函数
#2、高阶函数
#装饰器说白了就是函数嵌套+高阶函数
#装饰器的作用就是在不改变原有函数的调用方式,入参的情况下,给函数添加新功能
#偷偷摸摸的给函数加上新功能,但是不改变原来的函数
#常用模块
#什么是模块,模块其实就是一个python文件
import time,os,sys
def timer(func):
def deco(*args,**kwargs):
#*args,**kwargs用来接收传入函数的参数
start_time = time.time()
res = func(*args,**kwargs)#获取返回值
end_time = time.time()
print('runtime',end_time-start_time)
return res
return deco @timer #run = timer(run)
def run():
# start_time = time.time()
print('run..')
time.sleep(2)
# end_time = time.time()
# print('runtime', end_time - start_time)
#run == deco,
@timer
def run2(name):
print(name)
time.sleep(0.5)
run2('niuhanyang') #上面这个函数其实就是返回了一个函数名而已
#1、调用timer函数的时候,要传入一个方法名,
# timer函数在函数内部定义了一个函数叫做deco
#又在函数deco内部调用了timer里面传入的方法
#run保存的是deco,deco是一个函数,调用run就是调用deco

python笔记20-装饰器、作用域的更多相关文章

  1. python笔记 - day4-之装饰器

                 python笔记 - day4-之装饰器 需求: 给f1~f100增加个log: def outer(): #定义增加的log print("log") ...

  2. 20.python笔记之装饰器

    装饰器 装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作. 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插 ...

  3. Python笔记:装饰器

    装饰器        1.特点:装饰器的作用就是为已存在的对象添加额外的功能,特点在于不用改变原先的代码即可扩展功能: 2.使用:装饰器其实也是一个函数,加上@符号后放在另一个函数“头上”就实现了装饰 ...

  4. Python学习笔记:装饰器

    Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...

  5. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  6. 第二篇:python高级之装饰器

    python高级之装饰器   python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函 ...

  7. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  8. python函数闭包-装饰器-03

    可调用对象 callable()  # 可调用的(这个东西加括号可以执行特定的功能,类和函数) 可调用对象即  callable(对象)  返回为  True  的对象 x = 1 print(cal ...

  9. python高级之装饰器

    python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...

  10. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

随机推荐

  1. ZJOI 2014 星系调查(推导)

    题意 https://loj.ac/problem/2201 思路 说白了就是一条路径上有 \(n\) 个二维坐标,求一条直线使得所有点到此直线的距离和最小. 设这条直线为 \(y=kx+b\) ,距 ...

  2. Redis 集群版

    1.# yum install ruby -y 1.1 后面需要用到ruby脚本 2.# yum install rubygems -y 1.1 安装ruby包管理器 3.# gem install ...

  3. webdriver API

    切换iframe 1.iframe有id和name driver.switch_to_frame(loc) 2.iframe无id和name 先用xpath定位找到iframe.再switch ifr ...

  4. eclipse报错:Multiple annotations found at this line: - String cannot be resolved to a type解决方法实测

    Multiple annotations found at this line:- String cannot be resolved to a type- The method getContext ...

  5. vue drag 对表格的列进行拖动排序

    用drag实现拖动表格列进行列排序   以下是用到的主要方法   1.dragstart 拖动开始返回目标对象 2.dragenter 拖动过程中经过的对象 3.dragend 拖动结束返回目标对象 ...

  6. loadrunner中组合场景的应用

    进行性能测试的回归测试时,可以设置组合场景,例如: 这时可以以组的形式运行: 运行效果如下: 当login运行完成后,运行goodslist脚本 . 运行时可以查看运行用户数.事务平均响应时间.吞吐量 ...

  7. UI组件--element-ui--Upload多组件自定义上传

    需求: 提交详细信息的表单, 并上传对应图片(如下图), 后台接口要求表单数据和图片需要一次上传完成.. 分析: 实际上, 每个element-ui Upload组件都应发送一次请求, 很明显不符合我 ...

  8. 【转】TCP、UDP、RTP(RTCP)区别

    转自:https://www.cnblogs.com/imystr/p/4026639.html OSI七层模型OSI 中的层            功能                        ...

  9. NetSec2019 20165327 exp1+ 逆向进阶

    NetSec2019 20165327 exp1+ 一.实验内容介绍 第一个实践是在非常简单的一个预设条件下完成的: (1)关闭堆栈保护 (2)关闭堆栈执行保护 (3)关闭地址随机化 (4)在x32环 ...

  10. 铁大Facebook轻量化界面NABCD

    界面轻量化: N:满足了用户更快速.更直接.更方便寻求自己所要信息的需求,不被复杂界面以及各种广告所困扰. A:我们将会用Bootstrap工具包开发前端界面,Bootstrap是基于jQuery框架 ...