# 1.把一个函数当做另一个函数的返回值
def test():
print('我是test函数')return'hello'
def demo():
print('我是demo函数')returntest
def bar():
print('我是bar函数')return test()# x = test()# print(x)## y = demo() # y是test函数# print(y)# z = y()# print(z)
a = bar()
print(a)# 2.把一个函数当做另一个函数的参数,lambda表达式的使用# sort filter map reduce# 3.在函数内部再定义一个函数
函数的嵌套
def outer(x):
m =100#局部变量
print('我是outer函数')
def inner(): # inner函数是定义在outer函数内部的一个函数
print('我是inner函数')if x >18:
inner()return'hello'
outer(121)# print(m)# inner()
闭包的概念
# 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)
def outer():
x =10# 在外部函数里面定义了一个变量x,是一个局部变量
def inner():
# 在内部函数如何修改外部函数的局部变量
nonlocal x # 此时,这里的x不再是新增的变量,而是外部的局部变量x
y = x + 1
x =20
print(y)
print(x)
print(x)return inner
outer()()
计算一段代码的执行时间
importtime#time模块可以获取时间# 代码运行之前,获取一下时间
start = time.time()#time模块里的time方法,可以获取当前时间的时间戳
print(start)
x =0foriin range(1, 100000000):
x += i
print(x)
stop = time.time()
print(stop)
print('用了', stop - start)# 代码运行完成以后,再获取一下时间
优化计算时间的代码
importtime#time模块可以获取时间
def cal_time(fn):
start = time.time()
fn()
end = time.time()
print('代码运行耗时{}秒'.format(end - start))
def demo():
x =0foriin range(1, 100000000):
x += i
print(x)
cal_time(demo)
def foo():
print('hello')
time.sleep(3)
print('world')
cal_time(demo)
cal_time(foo)# start = time.time()# x = 0## for i in range(1, 100000000):# x += i## print(x)## stop = time.time()## print(stop)# print('用了', stop - start)
装饰器的使用
importtime
def cal_time(fn):
print('我是外部函数,我被调用了')
print('fn = {}'.format(fn))
def inner():
start = time.time()
fn()
end = time.time()
print('代码耗时', end - start)return inner
@cal_time #第一件事调用cal_time;第二件事把被装饰的函数传递给fn
def demo():
x =0foriin range(1, 100000000):
x += i
print(x)# 第三件事:当再次调用demo函数时,此时的demo函数已经不再是上面的demo了# 而是装饰器的返回值inner函数
print('装饰后的demo = {}'.format(demo))
demo()#此时就是inner函数了
@cal_time
def foo():
print('hello')
time.sleep(3)
print('world')
demo()
foo()
装饰器的详解
importtime
def cal_time(fn):
def inner(m, *args, **kwargs):
start = time.time()
s = fn(m)
end = time.time()
print('代码耗时', end - start)return s, end - start
return inner
@cal_time
def demo(n):
x =0foriin range(1, n):
x += i
return x
m = demo(100000000, 'good', p='hello')
print(m)