一、高阶函数
1.函数名本身就是一个变量 可以赋值
2.函数名可以作为返回值
def outer(): x = 5 def inner(): print(x) return inner outer()()
def outer(): x = 5 def inner(): print(x) return inner f = outer() f()
二、闭包
看第二个例子,f代表的是内部函数inner
在内部函数里面调用了外部的x,而且能找到外部的x
这称为闭包
三、time
import time start = time.time() time.sleep(1) end = time.time() print(end-start)
time.time()返回的数值是一个时间戳
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
time.sleep()函数是以秒为单位让程序停止运行
四、装饰器:
import time def out_time(f): def inner(): start = time.time() f() end = time.time() print(end-start) return inner @out_time def foo(): time.sleep(1) print("foo.....") foo()
想给程序加个功能,就是输出各个函数的执行时间,一种方法是给每个函数都加上计算机时间的开始和结尾语句,这加上也难,去除也难,而且会有大量重复代码,第二种是用修饰器
如代码 @out_time 等价于 foo = out_time(foo)
五、带有参数的函数的装饰
import time def out_time(f): def inner(*a,**b): start = time.time() f(*a,**b) end = time.time() print(end-start) return inner @out_time def foo(*a,**b): time.sleep(1) sum = 0 for i in a: sum += i print(sum) foo(1,2)
六、带参数的装饰器
import time def log(flag): def out_time(f): def inner(*a,**b): start = time.time() f(*a,**b) end = time.time() print(end-start) if flag == True: print("OK") return inner return out_time @log(True) def foo(*a,**b): time.sleep(1) sum = 0 for i in a: sum += i print(sum) foo(1,2)