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

 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. 在WSL中使用Window10中的virtualenv环境

    1.进入WSL的终端 2.创建env.sh脚本,内容如下: export WORKON_HOME=你环境的总目录if [ ! -d "$WORKON_HOME/$1/" ];the ...

  2. iOS 之地图坐标体系和转换

    一.坐标体系 首先我们要明白,开发者能接触到哪些坐标体系呢? 第一种分类: 1. GPS,WGS-84,原始坐标体系.一般用国际标准的GPS记录仪记录下来的坐标, 都是GPS的坐标.很可惜,在中国,任 ...

  3. Java开发面试题整理(2019春招)

    一.Java基础部分 1. HashMap和Hashtable各有什么特点,它们有什么区别?(必背题,超级重要) HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们 ...

  4. python3 使用ldap3来作为django认证后台

    首先先使用ldap3测试ldap服务是否正常 我们先要拿到dc的数据,以及连接ldap的密码,还有搜索的字段(search_filter), 一般来说search_filter 这个是从负责ldap运 ...

  5. 自动化测试工具Ranorex的录制功能使用

    由于帆软的 Report 包含gui和web端 设计器 web预览 做自动化测试不适合使用 Katalon 发现了Ranorex Ranorex 是一款在Windows操作系统的上运行的GUI自动测试 ...

  6. Mysql命令行tab自动补全方法

    在mysql命令行有时为了方便想要按tbl键自动补全命令,以便节约时间. 具体方法如下: 第一步:修改my.cnf vi mysql/etc/my.cnf 将下图红框的代码注释,修改成如下代码: #d ...

  7. share drive 无效

    docker设置的share dirve怎么按都无效 试了几遍都不行,想想刚才电脑系统更新了,然后查了下百度,发现是电脑策略的问题,设置成经典的就可以了

  8. Newtonsoft.Json转换强类型DataTable错误:Self referencing loop detected with type ......

    问题,在使用Newtonsoft.Json对强类型的DataTable进行系列化时会出现循环引用错误 解决办法,不要直接系列化强类型的DataTable,改为 JsonConvert.Serializ ...

  9. pytorch入门与实践-2.2

    Tensor 1--本质上可以理解为具有不同维度的数组 2--支持的基本运算 |---创建Tensor:  x=t.tensor(x,y) x,y 表示数组的大小 , x=t.rand(x,y), x ...

  10. 2018秋寒假作业4—PTA编程总结1

    7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个符 ...