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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# JD_AutoBuy ## 京东抢购 Python爬虫,自动登录京东网站,查询商品库存,价格,显示购物车详情等。 可以指定抢购商品,自动购买下单,然后手动去京东付款就行。 ## chang log + 2017-03-30 实现二维码扫码登陆 ## 运行环境 Python 2.7 ## 第三方库 - [Requests][1]: 简单好用,功能强大的Http请求库 - [beautifulsoup4][2]: HTML文档格式化及便签选择器 ## 环境配置 ``` Python pip install requests pip install beautifulsoup4 ``` ## 使用帮助 ``` cmd > python scraper-jd.py -h usage: scraper-jd.py [-h] [-u USERNAME] [-p PASSWORD] [-g GOOD] [-c COUNT] [-w WAIT] [-f] [-s] Simulate to login Jing Dong, and buy sepecified good optional arguments: -h, --help show this help message and exit -u USERNAME, --username USERNAME Jing Dong login user name -p PASSWORD, --password PASSWORD Jing Dong login user password -g GOOD, --good GOOD Jing Dong good ID -c COUNT, --count COUNT The count to buy -w WAIT, --wait WAIT Flush time interval, unit MS -f, --flush Continue flash if good out of stock -s, --submit Submit the order to Jing Dong ``` ## 实例输出 ``` cmd +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:01 2017 > 请打开京东手机客户端,准备扫码登陆: 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 202 : 请手机客户端确认登录 200 : BADACIFYhf6fakfHvjiYTlwGzSp4EjFATN3Xw1ePR1hITtw0 登陆成功 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:28 2017 > 商品详情 编号:3133857 库存:现货 价格:6399.00 名称:Apple iPhone 7 Plus (A1661) 128G 黑色 移动联通电信4G手机 链接:http://cart.jd.com/gate.action?pid=3133857&pcount=1&ptype=1 商品已成功加入购物车! 购买数量:3133857 > 1 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:30 2017 > 购物车明细 购买 数量 价格 总价 商品 Y 1 6399.00 6399.00 Apple iPhone 7 Plus (A1661) 128G 黑色 移动联通电信4G手机 总数: 1 总额: 6399.00 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:30 2017 > 订单详情 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ... ``` ## 注 代码仅供学习之用,京东网页不断变化,代

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值