首页 > 其他分享 >多层语法糖嵌套

多层语法糖嵌套

时间:2023-12-13 16:23:54浏览次数:23  
标签:return dream 多层 语法 嵌套 tag balance data def

装饰器多层语法糖嵌套

小练习:

# # 先验证登录
# # 再验证 输入的金额 --- 符合数字 / 余额充足
#
# # 取款函数里面
# 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())

标签:return,dream,多层,语法,嵌套,tag,balance,data,def
From: https://www.cnblogs.com/suyihang/p/17899302.html

相关文章

  • HarmonyOS学习(一) TypeScript 基础语法
    HarmonyOS学习(一)TypeScript基础语法一、基础类型1、布尔型booleanletisEnd:boolean=false;2、数字number//十进制2023letdecLiteral:number=2023;//二进制2023letbinaryLiteral:number=0b11111100111;//八进制2023letoctalLiteral:number=0o37......
  • react-native中嵌套的WebView发版后未更新问题
    问题使用了react-native-webview的WebView嵌套h5页面,但是当h5发版之后,重新打开app,h5还是发版前的页面。并且这个缓存严重,每次都要清理缓存或者重装app,页面不能及时更新,影响用户体验。解决rn项目中,在h5链接后边拼接时间戳,代码如下:注意:这里缓存使用的是@react-native-async-sto......
  • 无涯教程-Java - 嵌套 if 语句函数
    nestedif-else嵌套语句这意味着您可以在另一个iforelseif语句中使用一个iforelseif语句。nestedif-语法if(Boolean_expression1){//当布尔表达式1为true时执行if(Boolean_expression2){//当布尔表达式2为true时执行}}nestedif-示例......
  • js 跳出多层循环(终止循环)
    1、thrownewError()优点:可以中断循环执行;适用于各种形式(for循环,forEach循环等)缺点:相当于强制抛错中断执行,不仅终止了循环,后续代码也不再执行废话不多说,上例子,找出【第一个爱吃芒果】的人:constarr=[{name:'张三',fruit:['苹果','香蕉']}......
  • HarmonyOS第二课,TypeScript语法知识
    1、TypeScript中常用的变量类型1、布尔值TypeScript中可以使用boolean来表示这个变量是布尔值,可以赋值为true或者false。letisDone:boolean=false;2、数字TypeScript里的所有数字都是浮点数,这些浮点数的类型是number。除了支持十进制,还支持二进制、八进制......
  • 多层神经网络源码
    多层神经网络源码解析在深度学习领域,多层神经网络是一种常用的模型,用于解决各种复杂的问题。本文将介绍多层神经网络的原理,并通过一个简单的代码示例来演示其实现过程。神经网络原理神经网络是一种基于人工神经元的模型,通过多层神经元的连接来模拟人脑的信息处理过程。它由输入......
  • python数据类型元组、列表、集合、字典相互嵌套
    系统Windows10专业工作站版22H2软件python-3.9.6-amd64.exe拓展库:jupyter==1.0.0notebook==7.0.61.元组嵌套1.1元组嵌套元组try:tuple0=((1,2,3),(1,2,3),(1,2,3))print(tuple0,type(tuple0))except:print('error')((1,2,3),(1,2,3),(1,2,......
  • sqlalchemy 实现 mysql INSERT INTO...ON DUPLICATE KEY UPDATE语法
    1.前言myql的INSERTINTO...ONDUPLICATEKEYUPDATE语句,简单点来说,就是如果记录不存在,则插入,如果记录存在,则更新。那怎么判断记录存在否?——主键、唯一键。那不是可以使用replace语句吗?——原理上可以,但是sqlalchemyorm中的的实现,是使用merge语法,这个语法有一个限制,就是判......
  • Oracle多层子查询无法识别外层table
    selectsomething,somthingelse,(select*from(selectQUOTE_PRICEasold_pricefromprice_historywhereprice_history.part_no=article_table.part_noorderbyvalid_fromdesc)whererownum=1)fromarticle_tab......
  • Solidity基本语法学习4
    文档:https://solidity-by-example.org/视频教程:https://www.youtube.com/watch?v=xv9OmztShIw&list=PLO5VPQH6OWdVQwpQfw9rZ67O6Pjfo6q-p说明:本文内容:FunctionModifier,Events,Constructor,Inheritance,ShadowingInheritedStateVariables,CallingParentCon......