设为首页 加入收藏

TOP

第四周 day4 python学习笔记(一)
2017-10-10 08:31:30 】 浏览:2967
Tags:四周 day4 python 学习 笔记

  关于装饰器的更多信息可以参考http://egon09.blog.51cto.com/9161406/1836763

  1.装饰器Decorator

Open-mouthed smile装饰器:本质上是函数,(装饰其他函数),就是为其他函数添加附加功能
原则:不能修改被装饰函数的源代码;不能修改被装饰函数的调用方式
#实现装饰器的知识储备:
1.函数即变量
2.高阶函数,有两种方式:
(1)把一个函数名当做实参传递给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
(2)返回值中包含函数名(不修改函数调用的方式)
3.嵌套函数
高阶函数+嵌套函数==》装饰器
Dog faceimport time
#计算一个函数的运行时间的装饰器
def timer(func):
    def wrapper(*kargs,**kwargs):
        start_time=time.time()
        func()
        end_time=time.time()
        print("the func runtime is %s"%(end_time-start_time))
    return wrapper

@timer
def test1():
    time.sleep(3)
    print("in the test1....")

test1()
Dog face#高阶函数
def bar():
    print("in the bar...")

def test(func):
    print(func)#打印出该函数变量的地址
    func()

test(bar)

Dog face# 把一个函数名当做实参传递给另一个函数
import time
def bar():
    time.sleep(2)
    print("in the bar...")

def test(func):
    start_time=time.time()
    func()  #run bar()
    end_time=time.time()
    print(" the func runtime is %s"%(end_time-start_time))

test(bar)
Dog face# 返回值中包含函数名
import time
def bar():
    time.sleep(2)
    print("in the bar...")

def test2(func):
   print(func)
   return func

bar2=test2(bar)
bar2()
Winking smile#嵌套函数
#局部作用域和全局作用域的访问顺序
x=0
def grandpa():
    x=1
    print("grandpa:",x)
    def dad():
        x=2
        print("dad:",x)
        def son():
            x=3
            print("son:",x)
        son()
    dad()
grandpa()

#匿名函数:没有定义函数名字的函数
calc=lambda x,y:x+y
print(calc(13,15))
Hot smileimport time
def timer(func):
    def deco(*kargs,**kwargs):
        start_time=time.time()
        func(*kargs,**kwargs)
        end_time=time.time()
        print(" the func runtime is %s"%(end_time-start_time))
    return deco

@timer  # test1=timer(test1)
def test1():
    time.sleep(2)
    print("in the test1.....")

# test1=timer(test1)
test1()

@timer
def test2(name,age):
    time.sleep(3)
    print("in the test2:",name,age)

test2("Jean_V",20)

   
Sun#装饰器进阶版
#对各个页面添加用户认证
username,password="admin","123"
def auth(auth_type):
    print("auth_type:",auth_type)
    def out_wrapper(func):
        def wrapper(*args,**kwargs):
            if auth_type=="local":
                uname=input("请输入用户名:").strip()
                passwd=input("请输入密码:").strip()
                if uname==username and passwd==password:
                    print("\033[32;1m User has passed authentication\033[0m")
                    res=func(*args,**kwargs)
                    print("************after authentication")
                    print(res)
                else:
                    exit("\033[31;1m Invalid username or password\033[0m")
            elif auth_type=="LADP":
                print("我不会LADP认证,咋办?。。。")
        return wrapper
    return out_wrapper

def index():
    print("index page......")

@auth(auth_type="local")#home 页采用本地验证
def home():
    print("home page.....")
    return "from home page....."

@auth(auth_type="LADP")#bbs 页采用LADP验证
def bbs():
    print("bbs page....")

index()
print(home())
home()
bbs()
2.列表生成式














#列表生成式:一句代码更加简洁
a=[i*2 for i in range(10)]
print(a)
b=[i*i for i in range(20)]
print(b)
#上面的列表生成式等同于
res=[]
for i in range(10):
    res.append(i*2)
print(res)

#列表生成式的更加高级的用法:
#[funv(i) for i in range(10)]
def fun(n):#定义一个求阶乘的函数
    if n>1:
        return n*fun(n-1)
    else:
        return 1
#利用函数生成10以内的阶乘
c=[fun(i) for i in range(10)]
print(c)

3.迭代器与生成器

参考信息:h

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇day--16页面布局 下一篇Python协程爬取妹子图(内有福利,..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目