首页 / PYTHON / Python 函数(三)
Python 函数(三)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python 函数(三),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3560字,纯文字阅读大概需要6分钟。
内容图文
今天小婷儿给大家分享的是Python 函数(三)。
Python 3 函数 (闭包、装饰器、递归、高阶函数)
?一、闭包
内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量
都保存在返回的函数中,简单的说,这种内部函数可以使用外部函数变量的行为,就叫闭包。
?例一:
def sum_out(*args):
def sum_in(): #定义内内部函数
sumV = sum(args) #使用外部函数的args变量
return sumV
return sum_in #返回内部函数
S = sum_out(1, 2, 3)
print(S()) #真正调用的是sum_in函数
Python 3 结果:6
?例二:
def add1():
a = 1
b = 2
def add2(m, n):
return a + b + m + n
return add2
Add = add1()
print(Add(5,6))
Python 3 结果:14
?二、装饰器
装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数;
简言之,python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,
使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。
基本格式(记录下函数执行的时间):
import time
def add():
print('add')
add()
def log(func):
def wrapper():
print('调用%s函数时间:%s' % (func.__name__, time.strftime('%Y-%m-%d %H:%M:%S')))
func()
return wrapper
wrap1 = log(add)
wrap1()
注:__name__可以获得函数名称
?例一(带有参数的装饰器):
import time
def deco(func):
def wrapper(a,b):
startTime = time.time()
func(a,b)
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
return wrapper
@deco
def func(a,b):
print("hello,here is a func for add :")
time.sleep(1)
print("result is %d" %(a+b))
if __name__ == '__main__':
f = func
f(3,4)
?例二(带有不定参数的装饰器):
import time
def deco(func):
def wrapper(*args, **kwargs):
startTime = time.time()
func(*args, **kwargs)
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
return wrapper
@deco
def func(a,b):
print("hello,here is a func for add :")
time.sleep(1)
print("result is %d" %(a+b))
@deco
def func2(a,b,c):
print("hello,here is a func for add :")
time.sleep(1)
print("result is %d" %(a+b+c))
if __name__ == '__main__':
f = func
func2(3,4,5)
f(3,4)
?例三(多个装饰器):
import time
def deco01(func):
def wrapper(*args, **kwargs):
print("this is deco01")
startTime = time.time()
func(*args, **kwargs)
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
print("deco01 end here")
return wrapper
def deco02(func):
def wrapper(*args, **kwargs):
print("this is deco02")
func(*args, **kwargs)
print("deco02 end here")
return wrapper
@deco01
@deco02
def func(a,b):
print("hello,here is a func for add :")
time.sleep(1)
print("result is %d" %(a+b))
if __name__ == '__main__':
f = func
f(3,4)
http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w |
OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA
OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA
高可用(RAC+DG+OGG)培训说明连接:https://mp.weixin.qq.com/s/4vf042CnOdAD8zDyjUueiw
● 本文作者:小婷儿
● 作者博客地址:http://www.cnblogs.com/xxtalhr
● 版权所有,欢迎分享本文,转载请保留出处
● QQ群:483766429
● QQ号:87605025
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
内容总结
以上是互联网集市为您收集整理的Python 函数(三)全部内容,希望文章能够帮你解决Python 函数(三)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。