首页 > 其他 > 详细

对装饰器的简单认识

时间:2019-05-28 23:27:51      阅读:144      评论:0      收藏:0      [点我收藏+]

什么是闭包

如果在一个内部函数里,对外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包

 

 

def outer():
x = 10
def inner(): #inner是内部函数
print(x) #x是外部作用域的变量
return inner #inner 就是一个闭包

闭包 = 内部函数+ 定义函数时的环境

---恢复内容结束---

装饰器的简单认识

import time
def show_time(x):
def inner():
start = time.time()
x()
end = time.time()
print("spend %s"%(end - start))
return inner

def first():
print("Are you ok 1")
time.sleep(2)
first = show_time(first) # foo 等于执行show_time函数并传入first函数为参数,然后将inner作为一个返回值返回,让foo 接受,
first() #foo()等于执行inner函数


@show_time #second = show_time(second)
def second():
print("Are you ok")
time.sleep(3)
second() #加了装饰器的 second 函数 相当于 second = showtime(second) second的执行顺序,首先去执行show_time函数,然后去执行inner函数,
                    # #inner函数需要执行x()函数,show_time 将 second 函数作为一个参数已经传入了,此时的x相当于形参 x()相当于执行了函数second()函数


#给功能函数加参数
import time
def show_time(x):
def inner(*args,**kwargs):
start = time.time()
x(*args,**kwargs)
end = time.time()
print("spend %s"%(end - start))
return inner

@show_time #second = show_time(second)
def second(*args,**kwargs):
sums = 0
for i in args:
sums += i
print(sums)
time.sleep(3)
second(1,2,3,4,56)



#给装饰器函数加参数

import time
def looger(flag=""):
def show_time(x):
def inner(*args,**kwargs):
start = time.time()
x(*args,**kwargs)
end = time.time()
print("spend %s"%(end - start))
if flag == "true":
print("记录日志")
return inner
return show_time

@looger("true") #@logger = show_time
def second(*args,**kwargs):
sums = 0
for i in args:
sums += i
print(sums)
time.sleep(3)
second(12,23,34,45) #此时执行second函数,相当于执行looger函数,looger函数 = 执行show_time函数,执行show_time函数 = 执行inner函数 ,执行inner函数相当于执行 second函数
#此时的装饰器函数可以接受一个参数(“true”)和show_time(x)的x不同的是,参数true只是一个参数,而x指的是second函数




#用装饰器实现简单的登录
login_status = False
username,password ="admin","123456"

def choose(flag=""):
def looger(func):
def stamp():
global login_status
if login_status == False:
username1 = input("username:")
password2 = input("password:")

if flag =="jd":
print("欢迎使用京东账号登录")
if username == username1 and password == password2:
func()
login_status == True
if flag =="wx":
print("欢迎使用微信登录")
if username == username1 and password == password2:
func()
login_status == True
return stamp
return looger
@choose("jd")
def jingdong():
print(‘Welcome to JD‘)
@choose("wx")
def weixing():
print("Welcome to WeiXing")

if __name__ == ‘__main__‘:

jingdong()

对装饰器的简单认识

原文:https://www.cnblogs.com/langjitanya/p/10940924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!