python 函数高级功能
闭包
我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包。
# 闭包
# 外部函数的参数被内部函数引用,内部函数对外部参数的参数进行处理,返回一个结果,外部函数返回内部函数(引用内部函数)
def a_func(n):
def b_func(m):
return n*m
return b_func # 注意是没有(),不是b_func()
# 外函数返回内函数的引用,这里的引用指的是内函数b_func在内存中的起始地址
a=a_func(3)
print(a(4))
print(a(10))
装饰器
装饰函数,增加被装饰函数的功能
装饰器不带参数,被装饰参数不带参数
import time
# 定义装饰函数
def timer(func):
# 统计执行时间
def wrapper():
start_time=time.time()
func()
stop_time=time.time()
print('运行的时间 %s' %(stop_time-start_time))
return wrapper
# 定义被装饰函数
@timer
def i_can_sleep():
time.sleep(3)
# 调用i_can-sleep方法
i_can_sleep()
# 执行顺序,首先将i_can_sleep()传给timer,也就是timer(i_can_sleep());
# 然后执行wrapper()函数
# 装饰器与闭包的不同点,装饰函数传入的参数是一个函数,闭包传入的参数
被装饰函数带参数
# 被装饰函数带参数,也就是装饰函数的外部函数带参数
# 发现需要先定义装饰函数
def tips(func):
def nei(a,b): # 装饰函数的内部函数需要接收被装饰函数的参数
print('start')
func(a,b)
print('end')
return nei
@tips
def sum(a,b):
print(a+b)
a=sum(8,9)
装饰器带参数
ef new_tips(args):
def tips(func):
def nei(a,b): # 装饰函数的内部函数需要接收被装饰函数的参数
print('start to %s' % args)
func(a,b)
print('end to %s' % args)
return nei
return tips
@new_tips('add')
def sum(a,b):
print(a+b)
a=sum(8,9)
还可以获取被装饰函数的一些信息
def new_tips(args):
def tips(func):
def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数
print('func %s start to %s' % (func.__name__,args))
func(a,b)
print('func %s end to %s' % (func.__name__,args))
return nei
return tips
@new_tips('add_module')
def sum(a,b):
print(a+b)
a=sum(8,9)
@new_tips('sub_module')
def sub(a,b):
print(a-b)
全部代码
# 装饰器
import time
# 定义装饰函数
# 统计执行时间
def timer(func):
def wrapper():
start_time=time.time()
func()
stop_time=time.time()
print('运行的时间 %s' %(stop_time-start_time))
return wrapper
#
# # 定义被装饰函数
@timer
def i_can_sleep():
time.sleep(3)
# 调用i_can-sleep方法
i_can_sleep()
# 执行顺序,首先将i_can_sleep()传给timer,也就是timer(i_can_sleep());
# 然后执行wrapper()函数
# 装饰器与闭包的不同点,装饰函数传入的参数是一个函数,闭包传入的参数是一个变量
print('----------------------------------------------被装饰参数带参数------------------------------------------------')
# 被装饰函数带参数,也就是装饰函数的外部函数带参数
# 发现需要先定义装饰函数
def tips(func):
def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数
print('start')
func(a,b)
print('end')
return nei
@tips
def sum(a,b):
print(a+b)
a=sum(8,9)
print('----------------------------------------------装饰器带参数------------------------------------------------')
# 装饰器带参数
def new_tips(args):
def tips(func):
def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数
print('start to %s' % args)
func(a,b)
print('end to %s' % args)
return nei
return tips
@new_tips('add_module')
def sum(a,b):
print(a+b)
a=sum(8,9)
@new_tips('sub_module')
def sub(a,b):
print(a-b)
b=sub(102,98)
print('--------------------------------------------获取被装饰函数的一些信息--------------------------------------------------')
# 还可以获取被装饰函数的一些信息
def new_tips(args):
def tips(func):
def nei(a,b): # 装饰函数内部函数需要接收被装饰函数的参数
print('func %s start to %s' % (func.__name__,args))
func(a,b)
print('func %s end to %s' % (func.__name__,args))
return nei
return tips
@new_tips('add_module')
def sum(a,b):
print(a+b)
a=sum(8,9)
@new_tips('sub_module')
def sub(a,b):
print(a-b)
b=sub(10,7)
执行结果:
运行的时间 3.0007877349853516
----------------------------------------------被装饰参数带参数------------------------------------------------
start
17
end
----------------------------------------------装饰器带参数------------------------------------------------
start to add_module
17
end to add_module
start to sub_module
4
end to sub_module
--------------------------------------------获取被装饰函数的一些信息--------------------------------------------------
func sum start to add_module
17
func sum end to add_module
func sub start to sub_module
3
func sub end to sub_module
Process finished with exit code 0
python 函数高级功能的更多相关文章
- 12、Python函数高级(命名空间、作用域、装饰器)
一.名称空间和作用域 1.命名空间(Namespace) 命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空 ...
- python函数高级特性
掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...
- python爬虫高级功能
上一篇文章中我们介绍了爬虫的实现,及爬虫爬取数据的功能,这里会遇到几个问题,比方站点中robots.txt文件,里面有禁止爬取的URL.还有爬虫是否支持代理功能.及有些站点对爬虫的风控措施.设计的爬虫 ...
- 五年级--python函数高级运用
一.装饰器 二.迭代器 三.生成器 四.练习 一.装饰器 1.1 闭包函数用法 # 需求: # 执行一个函数前需要认证是否登录,如果登录则不需再登录. # 只认证一次,后续操作无需认证 # 要求认证使 ...
- Python —— 函数高级特性(切片、迭代、列表生成式、生成器、迭代器)
一.切片(Slice) 在很多编程语言中,针对字符串提供了很多截取函数(i.e. substring),目的就是对字符串切片.python中没有针对字符串的截取函数,需要通过“切片”来完成. 取一个 ...
- Python函数高级
函数对象 在面向对象编程中 一切皆对象 函数在python中是第一类对象 函数可以这么用 可以被引用 def func(): print('hello world !') f=func f() 可 ...
- Python爬虫之selenium高级功能
Python爬虫之selenium高级功能 原文地址 表单操作 元素拖拽 页面切换 弹窗处理 表单操作 表单里面会有文本框.密码框.下拉框.登陆框等. 这些涉及与页面的交互,比如输入.删除.点击等. ...
- Python函数装饰器高级用法
在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...
- 自动化测试(三)如何用python写一个函数,这个函数的功能是,传入一个数字,产生N条邮箱,产生的邮箱不能重复。
写一个函数,这个函数的功能是,传入一个数字,产生N条邮箱,产生的邮箱不能重复.邮箱前面的长度是6-12之间,产生的邮箱必须包含大写字母.小写字母.数字和特殊字符 和上一期一样 代码中间有段比较混沌 有 ...
随机推荐
- HTTP协议特性、HTML标签
HTTP协议 超文本传输协议,规定浏览器和服务端数据交互格式 四大特性 基于请求响应. 在TCP/IP协议之上的应用层协议. 无状态(不能保存用户信息,后来为了保存用户信息,诞生了cookie,ses ...
- 【文件格式探究】EP.1 对ePub文件格式的初探
这是"文件格式探究"专题的第 1 期--初探 "ePub" 文件格式.这个专题将会给各位读者呈现笔者探索各种文件格式的过程,具体则是文件的内容是如何呈现出来的. ...
- 项目报错:Invalid bound statement (not found):
出现这种错误有好多种情况,常见的错误有以下这些: 1.检查xml文件所在package名称是否和Mapper interface所在的包名 <mapper namespace="com ...
- shell 函数返回值与字典
shell的函数只能返回整数值,如果想让函数返回字符串可以在函数调用处为变量赋值. # 定义函数function test() { name=$1 echo "123213" } ...
- httpClient 下载
private void button2_Click(object sender, EventArgs e) { get(); } private async Task get() { await D ...
- .NET WebApi 实战第五讲之EntityFramework事务
在<.NET WebApi 实战第二讲>中我们有提到过事务的概念!任何数据库的读操作可以没有事务,但是写事件必须有事务,如果一个后端工程师在数据库写入时未添加事务,那就不是一个合格的工程师 ...
- c# 执行python方法
在C#使用Python脚本文件要注意的的是,首先要将IronPython2.7安装路径中的两个dll文件添加到C#引用中一个是IronPython.dll,另一个是Microsoft.Scriptin ...
- linux 端口80占用问题
主要是搭建一次ghost博客网站改成80端口无法启动提示被占用. 提示:80端口被占用,启动失败. netstat -ano 或者 netstat -apn | grep 80 没有发现占用80端口的 ...
- Python中的reduce()函数
reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收 ...
- 手动设置IDEA失效的配置文件