补充内容:

eval 将字符串变成变量名
locals   看输入的是否是字典中的一个key
func.__name____怎么看变量名的数据类型,将变量的名字转换成字符串
斐波那契数列

li=[1,1]
while li[-1]<1000000:
    li.append(li[-1]+li[-2])
print(li)

li=[1,1]
while len(li)<50:
    li.append(li[-1]+li[-2])
print(li)

最后两个数相加变成下个数,判断什么时候停下来

装饰器:

时间模块:

import time
def func():
    start=time.time()  .time 是时间戳
    print('老板万岁')
print(time.time()-start)   #时间戳,小数点前是秒
time.sleep(1)   睡眠,里面是几就是几秒

前面设定的time减去执行完毕的时间,就是程序运行时间
不用原因:改了函数

二次优化:

import time
def func():
    print('老板万岁')
start=time.time()    调用前开始计时,调用后再计算调用后时间相减
func()
end = time.time()
print(end-start)   优化完时间上同

不用的原因:没法给别人用

三次优化:

import time
def func():
    print('老板万岁')
def timer():
    start = time.time()
 func()
 end = time.time()
 print(end-start)
timer()

不用的原因:改的太多
最后一次优化:装饰器

import time
def qqxing():
    print('老板万岁')
def timer():
    def inner():
  start = time.time()
  func()
  end = time.time()
  print(end-start)
 return inner
qqxing = timer(qqxing)
qqxing()

装饰器意义,对于用户来将,感觉不到装饰器的存在
在一个函数的前后添加功能

加语法糖的装饰器

 

import time
def timer():
    def inner():
  start = time.time()
  func()
  end = time.time()
  print(end-start)
 return inner
@timer ------语法糖  =  qqxing = timer(qqxing)
def qqxing():
    print('老板万岁')

qqxing()

--------------------------
上个方法如果qqxing()里面有参数的话,就无法返回值
想返回值的话
当中func()要变成ret=func()并且返回ret
例子:

import time
def timer(func):
    def inner():
        start = time.time()
        ret = func()
        end = time.time()
        print(end-start)
        return ret
    return inner
@timer
def qqxing():
    print('老板万岁')
    return 123
ret = qqxing()
print(ret)

这样的话就有返回值

import time
def timer(func):
    def inner(*args,**kwargs):
        start = time.time()
        ret = func(*args,**kwargs)
        end = time.time()
        print(end-start)
        return ret
    return inner

计算函数执行时间↑
如果想让所有函数都可以用这个装饰器
那么有的函数有可能是空值,有的有可能是有值
所以装饰器内inner接受的函数参数应该是动态参数所以要在里面加*args和**kwargs
装饰器的结构:

def timer(func):
    def inner(*args,**kwargs):
        #被装饰的函数执行之前要做的
        ret = func(*args,**kwargs)  #被装饰的函数
        #被装饰的函数执行之后要做的
        return ret
    return inner

装饰器面试一定会被问

def timer(func):
    def inner(*args,**kwargs):
        print('你当前正在调用',func.__name__,'函数')
        ret = func(*args,**kwargs)#被装饰的函数
        return ret
    return inner
@timer
def welcome(name):
    print('welcome',name)
@timeref home():
    print('欢迎来到home页!')
welcome('alex')
home()

打印当前正在调用函数↑
装饰器遵守了开放封闭原则
    开放: 对扩展是开放的
 封闭: 对修改是封闭的

posted on 2017-08-31 18:32  Symoon_g  阅读(133)  评论(0编辑  收藏  举报