一 . 装饰器(很重要的一个内容)
定义: 本质是函数,(装饰其他函数)就是为其他函数添加其他功能
注意事项:a.不能修改被装饰的函数的源代码,
b. 不能修改被装饰的函数的调用方式。
补充:
a.函数就是“变量”,把函数体赋给了函数名。
b. 高阶函数+嵌套函数>>>>装饰器
c.高阶函数:把一个函数名当做实参传给另一个函数(不修改被装饰的函数的源代码);
返回值中包含函数名(不修改被装饰的函数的调用方式)。
#一个函数名当做实参传给另一个函数
import time
def bar():
time.sleep(3)
print('in the bar')
def test1(func):
start_time = time.time()
func() #run bar
stop_time = time.time()
print("the func run time is %s" % (stop_time - start_time) ) #运行时间等于结束时间减去开始时间
test1(bar)
注:不大理解这个(哈哈哈)
# 返回值中包含函数名
import time
def bar():
time.sleep(3)
print('in the bar')
def test2(func):
print(func)
return func
#print(test2(bar))
bar = test2(bar)
bar()
d.嵌套函数
函数的嵌套,在函数的内部再申明一个函数,而不是去调用
def foo():
print("in the foo")
def bar():
print("in tne bar") #函数的嵌套,在函数的内部再申明一个函数,而不是去调用
bar()
foo()
#局部变量与全局变量的访问次序:
x = 0 def grandpa(): x = 1 def dad(): x=2 def son(): x=3 print(x) son() dad() grandpa()
运行结果:3
1 import time 2 user,passwd = "xiaolaizi","abc123" 3 #装饰器 4 def auth(func): 5 def wrapper(*args,**kwargs): 6 username = input ("Username:").strip() #strip去空格 7 password = input("Password:").strip() 8 9 if user == username and passwd == password: 10 print("\033[32;1mUser has passed authentication\033[0m") 11 res = func(*args,**kwargs) 12 print(20*'*') 13 return res 14 else: 15 exit("\033[31;1mUser has not passed authentication\033[0m") 16 return wrapper 17 def index(): #定义一个首页 18 print("welcome to index page") 19 @auth #本地验证@auth(auth_type = "local") 20 def home(): #定义一个登陆页面 21 print("welcome to home page") 22 return "from home" 23 @auth #远程验证@auth(auth_type = "ldap") 24 def bbs(): #定义一个论坛区页面 25 print("welcome to bbs page") 26 27 index() 28 print(home()) 29 #home() 30 bbs()