python-16
#知识点一、函数的作用域 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的更多相关文章
- LPTHW 笨方法学习python 16章
根据16章的内容作了一些扩展. 比如,判断文件如果存在,就在文件后追加,如不存在则创建. 同时借鉴了shell命令中类似 cat <<EOF > test的方法,提示用户输入一个结尾 ...
- Python 16进制与字符串的转换
电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这 ...
- python 16 模块
目录 模块 1. 自定义模块 1.1 模块分类 1.2 模块的导入 1.3 import 和 from 1.4 from 模块名 import * 1.5 模块的用法: 1.6 导入路径 2. tim ...
- python (16) 如何在linux下安装lxml(pip安装,ubuntu下,centos下)
首先需要明白lxml包依赖其他包,必须先安装其他包然后再安装lxml 安装python-pip:方便安装python的第三方包 [root@******/]# wget https://bootstr ...
- [LeetCode][Python]16: 3Sum Closest
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 16: 3Sum Closesthttps://oj.leetcode.com ...
- 【Python 16】分形树绘制4.0(利用递归函数绘制分形树fractal tree)
1.案例描述 树干为80,分叉角度为20,树枝长度小于5则停止.树枝长小于30,可以当作树叶了,树叶部分为绿色,其余为树干部分设为棕色. 2.案例分析 由于分形树具有对称性,自相似性,所以我们可以用 ...
- Python 16 html 基础 jQuery & Javascript研究
基础内容 DOM操作 javascript探讨 JQuery初识 DOM innerText ==>获取仅文本 innerHtml ==>获取全部内容 <div id=" ...
- python 16 进程和线程
进程和线程 很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务. ...
- [Advanced Python] 16 - Google style guide for programming
Ref: Python 风格指南 - 内容目录 这里主要记录一下值得注意的地方. Python语言规范 Lint:vsCode自带 导入:完整路径 异常 Ref: [Python] 07 - Stat ...
- python 16 文件操作(二)
转自 http://www.cnblogs.com/BeginMan/p/3169020.html 一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进 ...
随机推荐
- 博客搬家了,新域名dinphy.wang
博客搬家了,新域名 dinphy.wang 博客搬家了,新域名 www.dinphy.wang 博客搬家了,新域名 dinphy.wang 博客搬家了,新域名 w ...
- Win7 SP1 32位 旗舰版 IE8 快速稳定 纯净优化 无人值守 自动激活 20170518
一.系统特色 1.采用微软原版旗舰版定制而成. 2.优化系统服务,关闭一些平时很少使用的服务. 3.精简掉一些无用的东西. 4.系统全程离线制作,不包含任何恶意插件,放心使用. 5.右下角时间加上星期 ...
- 刷机补丁包updater-script脚本
1.单刷补丁包 新建META-INF文件夹,新建txt文件命名为:updater-script新建system文件夹,在里面新建app文件夹,把你要单刷的apk放进app文件夹在updater-scr ...
- rabbitmq web管理
celery突然连接不上rabbitmq server,结果找半天发现是rabbitmq卡的不行... rabbitmq 设置web管理,添加用户 rabbitmqctl list_queues | ...
- 解决SVN 每次操作都需要重输入用户名密码问题
把目录C:\Users\当前账号\AppData\Roaming\Subversion\auth下的文件删除,然后重启hbuilder或eclipse工具,重新输入账号密码之后,保存即可解决该问题.
- ATR的计算
TR=∣最高价-最低价∣和∣最高价-昨收∣和∣昨收-最低价∣的最大值 TR = max(high-low, abs(last-high), abs(last-low)) ATR = MA(TR, N) ...
- Linux 相关术语_002
Linux(Linux is not unix)是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. 它能运行主要的UNIX工 ...
- Nginx+Keepalived+Tomcat高可用负载均衡,Zookeeper集群配置,Mysql(MariaDB)搭建,Redis安装,FTP配置
JDK 安装步骤 下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html rpm ...
- jsp 连接access数据库
参考笔记:https://www.cnblogs.com/mthoutai/p/7278995.html
- java使用指定的国际化文件
java代码: import java.util.Locale; import org.junit.Test; /** * 使用指定的国际化文件 */ public class Demo { @Tes ...