多层语法糖嵌套
1.计算机基础2.编程语言和Python语言介绍3.八大基本数据类型4.python语法入门变量和常量5.python和pycharm相关补充6.计算机五大部件补充7.文件操作8.编码和解码9.字符编码10.基本数据类型的内置方法11.循坏结构12.流程控制13.基本运算符14.程序与用户交互15.迭代器16.闭包函数17.装饰器
18.多层语法糖嵌套
19.函数的参数20.函数的可变长参数21.命名关键字参数22.名称空间与作用域23.异常处理24.深浅拷贝问题25.函数的定义和调用26.控制文件读写内容的模式27.主动控制文件内指针移动28.文件的操作方法29.垃圾回收机制GC30.可变与不可变类型31.元类32.内置方法33.pickle模块34.单例模式35.方法补充issubclass和isinstance36.多态37.继承38.面向对象的三大特性39.封装40.内置函数41.面向对象42.logging模块43.subprocess模块44.正则45.datetime模块46.time模块47.绝对路径和相对路径48.random模块49.os模块50.hashlib模块51.模块与包52.json模块53.生成器54.三元运算符装饰器多层语法糖嵌套
小练习:
# # 先验证登录
# # 再验证 输入的金额 --- 符合数字 / 余额充足
#
# # 取款函数里面
# def get_balance():
# # 校验登录
# # 校验金额 符合数字 / 余额充足 --- 把金额通过装饰器 返回来
# # 拿着你的金额进行提款
use_data = {'username': 'dream', 'password': '521'}
bank_data = {'dream': {'pay_pwd': '521', 'balance': 1000}}
def login_auth(func):
def inner(*args,**kwargs):
if use_data['username']!='dream' and use_data['password']!='521':
return False,f'用户名或密码错误!'
else:
return func(*args,**kwargs)
return inner
def get_balance_auth(func):
def inner(*args,**kwargs):
if bank_data['dream']['pay_pwd'] != '521':
return False,f'取款密码错误!'
get_balance_input=input('请输入取款金额:').strip()
if get_balance_input.isdigit():
get_balance_input=int(get_balance_input)
if 0<get_balance_input<=bank_data['dream']['balance']:
return func(balance=get_balance_input,*args,**kwargs)
else:
return False,f'余额不足!'
return inner
@login_auth
@get_balance_auth
def get_balance(*args,**kwargs):
# print(kwargs)
bank_data['dream']['balance']-=kwargs.get('balance')
bank_data['dream']['balance']=bank_data['dream']['balance']
# print(bank_data)
return f"取款金额为{kwargs.get('balance')},还剩下{bank_data['dream']['balance']}"
print(get_balance())
有参装饰器模板
"""有参装饰器模板"""
def wrapper_func(tag):
def wrapper(func):
def inner(*args,**kwargs):
#tag 表明当前需要处理的使用函数的逻辑
#存钱--不需要校验提款密码
#取钱--需要校验提款密码
if tag==None:
...
#正常函数内需要的逻辑
return func(*args,**kwargs)
return inner
return wrapper
wrapper_func(tag=None)
def balance():
...
练习
- use_data = {'username': 'dream', 'password': '521'}
bank_data = {'dream': {'pay_pwd': '521', 'balance': 1000}} - 取款-----校验登录-----校验取款密码
- 存款------校验登录-----不需要校验密码
use_data = {'username': 'dream', 'password': '521'}
bank_data = {'dream': {'pay_pwd': '521', 'balance': 1000}}
def check_balance(tag_fun=None,tag=None):
if tag_fun=='login':
def login_auth(func):
def inner(*args,**kwargs):
if use_data['username']!='dream' and use_data['password']!='521':
return False,f"用户名或密码错误!"
else:
return func(*args,**kwargs)
return inner
return login_auth
elif tag_fun=='balance':
def balance_auth(func):
def inner(*args,**kwargs):
#存款
balance_input=input('请输入金额:')
if not balance_input.isdigit():
return False, f'输入有误!'
balance_input=int(balance_input)
if tag!='add_balance':
pay_password_input=input('请输入取款密码:').strip()
if pay_password_input!=bank_data['dream']['pay_pwd']:
return False,f'取款密码有误!'
if balance_input>bank_data['dream']['balance']:
return False,f'余额不足!'
return func(balance=balance_input,*args,**kwargs)
return inner
return balance_auth
@check_balance(tag_fun='login')
@check_balance(tag_fun='balance',tag='get_balance')
#取款
def get_balance(*args,**kwargs):
bank_data['dream']['balance']-=kwargs.get('balance')
bank_data['dream']['balance']=bank_data['dream']['balance']
return f"取款{kwargs.get('balance')}剩余{bank_data['dream']['balance']}"
print(get_balance())
#存款
@check_balance(tag_fun='login')
@check_balance(tag_fun='balance',tag='add_balance')
def add_balance(*args,**kwargs):
bank_data['dream']['balance'] += kwargs.get('balance')
bank_data['dream']['balance'] = bank_data['dream']['balance']
return f"村款{kwargs.get('balance')}剩余{bank_data['dream']['balance']}"
# print(add_balance())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)