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))

global 修改全局变量

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

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

装饰器的定义

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

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

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

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

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、装饰器之基于开发实现登录验证

原创文章 49 获赞 23 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Smile_Mr/article/details/85258339