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

 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. hdoj:2056

    #include <iostream> #include <iomanip> #include <cstdlib> using namespace std; str ...

  2. Android WebRTC开发入门

    在学习 WebRTC 的过程中,学习的一个基本步骤是先通过 JS 学习 WebRTC的整体流程,在熟悉了整体流程之后,再学习其它端如何使用 WebRTC 进行互联互通. 申请权限 Camera 权限 ...

  3. C语言 sscanf用法详解

    /* sscanf用法详解 */ #include <stdio.h> /* sscanf头文件 */ #include <stdlib.h> #include <str ...

  4. Linux 文件umask默认权限_012

    一.       umask介绍 Linux 系统用户创建一个新的目录或文件时,系统会默认会分配相应的权限.目录或文件的权限是如何产生的呢? 1.这就是umask的功能,umask设置了用户创建文件或 ...

  5. SpringBoot系统列 1 - HelloWorld!

    学习SpringBoot系统列之HelloWorld! 1.新建一个Maven项目 2.添加POM配置 <parent> <groupId>org.springframewor ...

  6. Swagger UI 与SpringMVC的整合 II

    pom.xml <!-- swagger开始 --> <dependency> <groupId>io.springfox</groupId> < ...

  7. CentOS安装和配置Docker和Nginx

    纯粹记录下: 1 安装Docker容器: yum install docker-ce 2. 搜索官网nginx docker search nginx 3. 找到需要的版本安装: docker pul ...

  8. dedecms模板中 if else怎么写

    在制作dedecms模板时,有时需要使用IF  ELSE判断语句,但是dedecms模板中是无法使用使用IF语句的,否则会报错. 那么如何在dedecms模板中使用 if else呢?这就需要我们多走 ...

  9. go关键字之struct定义声明方式

    type Student struct{ name string age int } var stu Student stu.name,stu.age = "张三”,10 stu2 := S ...

  10. tcp的粘包和拆包示例以及使用LengthFieldFrameDecoder来解决的方法

    粘包和拆包是什么? TCP协议是一种字节流协议,没有记录边界,我们在接收消息的时候,不能人为接收到的数据包就是一个整包消息 当客户端向服务器端发送多个消息数据的时候,TCP协议可能将多个消息数据合并成 ...