python 高级函数知识闭包装饰器-模拟淘宝、京东登录验证

Python函数高阶之必会知识闭包装饰器

本章所讲内容:

1、装饰器使基础之闭包

2、装饰器之基于开发实现登录验证

1、装饰器使基础之闭包(面试题)

1、闭包定义

1. 闭包函数必须有内嵌函数;

2. 内嵌函数可以引用该嵌套函数上一级namespace中的变量;

3. 闭包函数必须返回内嵌函数;

通过这三点,就可以创建一个闭包;Python装饰器就是使用了闭包。

闭包的好处,使代码变得简洁,提高代码的拓展性。

def outer(num):
   
def inner(num_in):
       
print('inner,num_in is %d'%num_in)
       
return num+num_in
   
return inner
# a == inner
a = outer(20) # inner
# print(a)
#a(200)==inner(200)

print(a(200))

  1. global 修改全局变量

x = 2
def outer():
    x =
0
   
def inner():
       
global x
        x = x+
1
       
print(x)
   
return inner
outer()()
#inner()
print(x)

  1. 装饰器之基于开发实现登录验证(面试题)

  1. 装饰器的定义

装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼。

当我们已经写好一个函数时,项目也已经上线了,突然客户想要增添一个需求,让这个函数处理的更加细致,这个就可以用到装饰器了。

执行顺序:  先返回内嵌函数à有参数直接传参给内嵌函数à执行内嵌函数

装饰器快速入门假如现在我们定义了两个函数,分别来打印他们的名字。

def func1():
   
print('this is xuegod1')
   
# print('I come from china')
def Dec(func):
   
def inner():
        func()
       
print('I come form china')
   
return inner
#f1 == inner
f1 = Dec(func1)
#inner()
func1()

但是上面有个问题,比如func1在别的地方有调用的话,是不是还需要把func1修改为f1,不然调用报错

其次,python认为上面的写法不简洁,所以提出了@语法糖

def Dec(func):
   
def inner():
        func()
       
print('I come form china')
   
return inner
@Dec
#func1 = Dec(func1)
def func1():
   
print('this is xuegod1')
   
# print('I come from china')
func1()

 

模拟登录验证

import time

a = [
'while','for','django']
def outer(func):
   
def inner(name):
       
# name = 'for'
       
func(name)
       
print('开始判断你有没有登录')
        time.sleep(
2)
       
if name in a:
           
print('已经登录成功,请尽情访问')
            time.sleep(
1)
       
else:
           
print('你没有登录,没有访问权限')
            time.sleep(
1)
   
return inner

@outer
def login(name):
   
print('我要浏览')
login(
'fo')

总结:

1、装饰器使基础之闭包

2、装饰器之基于开发实现登录验证

你可能感兴趣的:(python 高级函数知识闭包装饰器-模拟淘宝、京东登录验证)