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 一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进 ...
随机推荐
- hdoj:2076
夹角有多大(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdoj:2052
#include <iostream> #include <string> using namespace std; int main() { int n, m; while ...
- [转] 一个小时学会Git
一个小时学会Git http://www.cnblogs.com/best/p/7474442.html
- 用命令创建MySQL数据库
一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1. 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u roo ...
- tensorflow c/c++库使用方法
tensorflow目前支持最好的语言还是python,但大部分服务都用C++ or Java开发,一般采用动态链接库(.so)方式调用算法,因此tensorflow的c/c++ API还是有必要熟悉 ...
- 高并发分布式系统中生成全局唯一(订单号)Id
1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与GUID组合 ...
- 禅道docker化(Centos7.2)
操作步骤 确认服务器禅道版本及容器禅道版本 服务器禅道版本:9.6.2 容器禅道版本:9.6.3 版本sql比对 下载官方9.6.3源码包url:http://dl.cnezsoft.com/zent ...
- sql脚本练习
多写sql语句,才能对数据库操作更加熟练. create database springbootdemo; use springbootdemo; create table user; // 这个脚本 ...
- java的方法重载
1丶java的方法重载特性 满足以下条件的两个或多个方法构成“重载”关系:(1)方法名相同 (2)参数类型不同,参数个数不同或者参数类型的顺序不同 像System.out.println一样,就是重载 ...
- duilib中字体font设置
<Font name="微软雅黑" size="9" bold="false"/> <Label name="n ...