# Python 函数（三）

2021-04-13 18:03:16  阅读：25  来源： 互联网

今天小婷儿给大家分享的是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

#### 例二：

a = 1

b = 2

return a + b + m + n

Python 3 结果：14

## 二、装饰器

import time

def log(func):

def wrapper():

print('调用%s函数时间:%s' % (func.__name__, time.strftime('%Y-%m-%d %H:%M:%S')))

func()

return wrapper

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)

DB笔试面试历史连接
 http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

OCP培训说明连接：https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培训说明连接：https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

DBA宝典小程序

● 本文作者：小婷儿

● 作者博客地址：http://www.cnblogs.com/xxtalhr

● 版权所有，欢迎分享本文，转载请保留出处

● QQ群：483766429

● QQ号：87605025