闭包加参数

首先写一个装饰器,对闭包进行修改

import time
def timmer(func):
	def wapper():
		start_time = time.time()
		res = func()
		stop_time = time.time()
		print('运行时间为%s' %(stop_time - start_time)
		return res
	return wapper 
@timmer
def test():
	time.sleep(2)
	print('timeout')
	return '这是test的返回值'

如果被修饰的函数有参数,可以在调用的函数中加入可变长参数,但是如果只在一个函数中加入可变长参数会报错,比如说在test函数中加入两个参数,但是因为tast运行的是wapper所以wapper中也需要加入参数,之后再func中也需要加入参数,就很麻烦
这里就可以用*args和**kwargs写在传入的变量中,之后运行test时加入参数就可以了:

import time
def timmer(func):
	def wapper(*args,**kwargs):
		start_time = time.time()
		res = func(*args,**kwargs)
		stop_time = time.time()
		print('运行时间为%s' %(stop_time - start_time))
		return res
	return wapper
@timmer
def test(name,age):
	time.sleep(2)
	print('timeout,name is %s,age %s' % (name,age))
	return '这是test的返回值'
test('qqq',12)
res = test('yibole',18)
print(res)

当然,语法糖内也是可以传参数进去的,比如说在timmer函数外再包一层函数,然后写一个判断条件是否让该函数运行,这时候在语法糖上加入参数,如果是该参数,则运行一下函数,如果不是该参数则运行其他函数:

user_dick = {'username':None,'login':False}

def waiceng(x = 'nimabi'):
    def zhuangshiqi(func):
        def wapper(*args,**kwargs):
            print('在?kkp',x)
            if x == 'nimabi':
                if user_dick['username'] and user_dick['login']:
                    res = func(*args,**kwargs)
                    return res
                username = input('用户名:').strip()
                passwd = input('密码:').strip()
                if username == 'yibole'and passwd =='123':
                    user_dick['username'] = username
                    user_dick['login'] = True
                    res = func(*args,**kwargs)
                    return res
                else:
                    print('用户名或密码错误!')
                return
            else:
                print('不在,guna')
        return wapper
    return  zhuangshiqi
@waiceng()
def index():
    print('欢迎来到主页')
@waiceng()
def login():
    print('登陆成功')
login()
@waiceng(x = 'qqq')
def shopping_car():
    print('购物车含有[%s,%s,%s]'%('switch','Ps4','XboxOne'))
index()
login()
shopping_car()

上面这个是一个类似于电子商城的一个登陆的模拟,po啊,你要是忘了你学的东西,可以一定要回头看看喔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值