#知识点一、函数的作用域

 int()   #内置变量 B
v = 6 #全局变量G
def outer(): x = 5 #嵌套变量 E def inner(): b = 10 #局部变量 L
print(x) #知识点二、高阶函数
#什么是高阶函数? 二条件有一个条件符合即可 1.函数名可以作为参数传入函数 2.函数名可以作为返回值 def test(inner):
return outer #知识点三、闭包
#什么是闭包? 内部函数,对外部作用域(而非全局作用域)进x行引用,那么该内部函数就是闭包
#闭包的用处: 闭包函数可以脱离外部作用域而直接可以调用外部作用域 x def fuck(): x = 10 #外部作用域 而非全局作用域
def shit(): #内部函数
print(x) #对外部作用域进x行引用
 # 装饰器

 #1.需求:计算函数执行的时间,假如要计算的函数个数为300个,该怎么处理?
#假设要计算的函数对象如下:
def test(): print("test...") #因为要计算300个函数的执行时间,涉及到代码的重复,所以需要专门定义个计算函数执行时间的函数
import time
def showtime(f):
start = time.time() #开始时间
#这里是函数的执行 函数名为传入的参数f
f() #这是函数逇执行
end = time.time() #结束时间 print(end-start) #计算执行了多长时间
# 进一步优化以上函数
# 需求:每次都要调用这个新函数,为了简便,需要对该函数重新命名成需要计算函数执行时间的函数名
# 优化二:
# 重新定义个test变量 让其等于该showtime()函数
test = showtime
test() #如果是这样执行的话原 shoutime()函数的参数该怎么传过去呢?因为这样的话test()函数执行后与原函数指向一样
# 优化三:
# 优化计时器函数 def showtime(f):#这是外部函数
def inner():
start = time.time() #开始时间
#这里是函数的执行 函数名为传入的参数f
f() #这是函数逇执行###############这里使用到了闭包
end = time.time() #结束时间
print(end-start) #计算执行了多长时间
return inner test = showtime(test) # 该语句python中做了进一步优化 使用@
test() #执行函数 就执行了计算函数执行时间的函数 # 优化三:
@showtime
def test():
print("test...")
test() #函数的执行,计算函数的执行时间
 #装饰器参数
#待装饰函数参数 #定义装饰函数
#功能 计算函数的执行时间
# 闭包函数 :就是让需要装饰的函数先执行该闭包函数以实现该装饰功能
# 然后再执行该函数本身的原始定义 #这是无参数状态
import time
def showTime(f): def showWratter(): #这里不能穿多参数
start = time.time()
f()
time.sleep(2)
end = time.time()
print(end -start)
return showWratter #记住一定要返回该闭包函数名 #定义待装饰函数
@showTime
def test(): #被执行的函数的参数要有闭包函数的参数要一致
print("我爱北京天安门")
test()
 #装饰对象 带参数
import time
def showTime(f): def showWratter(*args): #这里不能穿多参数
start = time.time()
f(*args)
time.sleep(2)
end = time.time()
print(end -start)
return showWratter #记住一定要返回该闭包函数名 #定义待装饰函数
@showTime
def add(*args): #被执行的函数的参数要有闭包函数的参数要一致 这里带了参数 all = 0
for i in args:
all +=i
print("我爱北京天安门",all)
add(1,3,4,5,6) # 我爱北京天安门 19
 # 装饰器需要传参数
# 需求:我需要传个参数,如 flag 为true时候打印日志,为false时候不打印日志
# 该怎么传参数呢?
# 实现如下:通过闭包函数时间传参数 因为闭包函数能够引用外部的参数 利用了这点
import time
def logger(flag):
def showTime(f): def showWratter(*args): #这里不能穿多参数
start = time.time()
f(*args)
if flag == "True":
print("这里打印出日志来了!")
time.sleep(2)
end = time.time()
print(end -start)
return showWratter #记住一定要返回该闭包函数名
return showTime #返回值 #定义待装饰函数
@logger("True") # 装饰器参数逇使用
def add(*args): #被执行的函数的参数要有闭包函数的参数要一致 这里带了参数 all = 0
for i in args:
all +=i
print("我爱北京天安门",all)
add(1,3,4,5,6) # 我爱北京天安门 19

python-16的更多相关文章

  1. LPTHW 笨方法学习python 16章

    根据16章的内容作了一些扩展. 比如,判断文件如果存在,就在文件后追加,如不存在则创建. 同时借鉴了shell命令中类似 cat <<EOF > test的方法,提示用户输入一个结尾 ...

  2. Python 16进制与字符串的转换

    电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这 ...

  3. python 16 模块

    目录 模块 1. 自定义模块 1.1 模块分类 1.2 模块的导入 1.3 import 和 from 1.4 from 模块名 import * 1.5 模块的用法: 1.6 导入路径 2. tim ...

  4. python (16) 如何在linux下安装lxml(pip安装,ubuntu下,centos下)

    首先需要明白lxml包依赖其他包,必须先安装其他包然后再安装lxml 安装python-pip:方便安装python的第三方包 [root@******/]# wget https://bootstr ...

  5. [LeetCode][Python]16: 3Sum Closest

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 16: 3Sum Closesthttps://oj.leetcode.com ...

  6. 【Python 16】分形树绘制4.0(利用递归函数绘制分形树fractal tree)

     1.案例描述 树干为80,分叉角度为20,树枝长度小于5则停止.树枝长小于30,可以当作树叶了,树叶部分为绿色,其余为树干部分设为棕色. 2.案例分析 由于分形树具有对称性,自相似性,所以我们可以用 ...

  7. Python 16 html 基础 jQuery & Javascript研究

    基础内容 DOM操作 javascript探讨 JQuery初识 DOM innerText  ==>获取仅文本 innerHtml  ==>获取全部内容 <div id=" ...

  8. python 16 进程和线程

    进程和线程 很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务. ...

  9. [Advanced Python] 16 - Google style guide for programming

    Ref: Python 风格指南 - 内容目录 这里主要记录一下值得注意的地方. Python语言规范 Lint:vsCode自带 导入:完整路径 异常 Ref: [Python] 07 - Stat ...

  10. python 16 文件操作(二)

    转自 http://www.cnblogs.com/BeginMan/p/3169020.html 一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进 ...

随机推荐

  1. socket.timeout: The read operation timed out 更改pip源至国内镜像,显著提升下载速度

    出现socket.timeout: The read operation timed out  错误的时候,可能是pip源不稳定,改改试试看!  经常在使用Python的时候需要安装各种模块,而pip ...

  2. 23命令模式Command

    一.什么是命令模式 Command模式也叫命令模式 ,是行为设计模 式的一种.Command模式通过被称为 Command的类封装了对目标对象的调用行为以及调用参数. 二.命令模式的应用场景 在面向对 ...

  3. iOS开发之--在UIWindow上展示/移除一个View

    代码如下: 展示 UIWindow *window = [[UIApplication sharedApplication].windows lastObject]; [window addSubvi ...

  4. MXPlayer ac3音轨支持问题

    下载的MXPlayer 在播放kvm视频的时候没有声音, 说是不支持ac3的音频 到官网下载单独的解码包: https://mxplayerdownloads.com/mx-player-ac3-dt ...

  5. 【物联网】 9个顶级开发IoT项目的开源物联网平台(转)

    物联网(IoT)是帮助人工智能(AI)以更好的方式控制和理解事物的未来技术. 我们收集了一些最有名的物联网平台,帮助您以受控方式开发物联网项目. 物联网平台是帮助设置和管理互联网连接设备的组件套件. ...

  6. VS每次F5都重新编译代码,即使没有任何修改

    遇到一个奇怪现象,不知道怎么设置了,突然工程的Release模式下,F5每次都要重新编译代码,而且是全部代码都重新编译 而Debug模式没问题 重启VS,重启机器,清理工程重新生成工程都无法解决 最后 ...

  7. docker应用-5(使用overlay 网络进行容器间跨物理主机通信)

    同一个主机上的Docker容器之间通信 docker 引擎会在主机上增加一个docker0网卡,该网卡具有双重身份: 1.从容器视角,网桥(交换机)身份docker0 对于运行在同一个主机上的各个容器 ...

  8. layui---事件监听

    在使用layui的form表单做验证提交的时候,如果结合vue,或者是三级联动的时候,就需要做事件监听了. 具体语法: form.on('event(过滤器值)', callback); 可以用于监听 ...

  9. 【1】public

    [面向对象] 李坤是不是人?(人类) 飞飞是不是人?(人类) 扎心是不是人?(人类) 是:特指某一个事物 属于:同一的类型 什么是对象: 就是特指的某一个东西,万物皆对象 什么是类: 具有一批相同属性 ...

  10. python 接口自动化测试(五)其他-认证&代理&超时配置

    有了前面几节的介绍,基本的接口测试是可以满足了.本节一些其它的高级技巧: 一.认证 1.基本认证: # -*- coding:utf-8 -*- import requests url = " ...