前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 函数(三)

Python 函数(三)

作者头像
AiDBA宝典
发布2022-02-23 14:49:05
2650
发布2022-02-23 14:49:05
举报
文章被收录于专栏:小麦苗的DB宝专栏

今天小婷儿给大家分享的是Python 函数(三)。

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)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python 3 函数 (闭包、装饰器、递归、高阶函数)
    • 一、闭包
      • 二、装饰器
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档