首页 > 编程语言 >Python学习路程——Day12

Python学习路程——Day12

时间:2022-10-12 23:24:41浏览次数:47  
标签:index 路程 func Python res Day12 print return def

Python学习路程——Day12

多层语法糖

'''
多层语法糖 加载顺序由下往上
每次执行之后如果上面还有语法糖 则直接将返回值函数名传给上面的语法糖
如果上面没有语法糖了 则变形 index = outter1(wrapper2)
'''
def outter1(func1):
    print('我是第3个输出的!')
    def inner1(*args, **kwargs):
        print('我是第4个输出的')
        res1 = func1(*args, **kwargs)  # func1 = inner2   res1 接收的返回值是 res2 也是index的 也是None
        print('我是10第个输出的')
        print(res1, '3')
        return res1
    return inner1

def outter2(func2):
    print('我是第2个输出的!')
    def inner2(*args, **kwargs):
        print('我是第5个输出的')
        res2 = func2(*args, **kwargs) # func2 = inner3  res2 的接收返回值 res3 也是index的 也是None
        print('我是第9个输出的')
        print(res2, '2')
        return res2
    return inner2

def outter3(func3): # outter3(index)
    print('我是第1个输出的!') # 1
    def inner3(*args, **kwargs):
        print('我是第6个输出的')
        res3 = func3(*args, **kwargs) #  func3 =index   res3 的返回值是index 为None
        print('我是第8个输出的')
        print(res3, '1')
        return res3
    return inner3

@outter1    #  index = outter1(inner2)    index = outter1(inner2)    index = inner1
@outter2    #  index = outter2(inner3)
@outter3    #  index = outter3(index)
def index():
    print('我是第7个输出的')
    return 1
res = index()
print(res, '4')

输出结果

我是第1个输出的!
我是第2个输出的!
我是第3个输出的!
我是第4个输出的
我是第5个输出的
我是第6个输出的
我是第7个输出的
我是第8个输出的
1 1
我是第9个输出的
1 2
我是10第个输出的
1 3
1 4

有参装饰器

def outter(mode):
    def longin_auth(func_name):
        def inner(*args, **kwargs):
            user_name = input('user_name>>>:').strip()
            pass_word = input('pass_word>>>:').strip()
            if mode == '1':
                print('1')
                res = func_name(*args, *kwargs)
                return res
            elif mode == '2':
                print('2')
                res = func_name(*args, *kwargs)
                return res
            elif mode == '3':
                print('3')
                res = func_name(*args, *kwargs)
                return res
            res = func_name(*args, *kwargs)
            return res
        return inner
    return longin_auth

@outter('1')
def index():
    print('1')
index()

@outter('2')
def func():
    print('2')
func()

@outter('3')
def base():
    print('3')
base()

输出结果

user_name>>>:aaa
pass_word>>>:111
1
1
user_name>>>:333
pass_word>>>:444
2
2
user_name>>>:555
pass_word>>>:666
3
3

有参装饰器模板

# def index():
#     """index函数 非常的牛"""
#     pass
# help(index)
# help(len)
from functools import wraps
def outer(func_name):
    @wraps(func_name)  # 仅仅是为了让装饰器的效果更加逼真 平时可以不写
    def inner(*args, **kwargs):
        """我是inner 我擅长让人蒙蔽"""
        res = func_name(*args, **kwargs)
        return res
    return inner

@outer
def func():
    """我是真正的func 我很强大 我很牛 我很聪明"""
    pass


# help(func)
# print(func)
func()

装饰器修复技术

# def index():
#     """index函数 非常的牛"""
#     pass
# help(index)
# help(len)
from functools import wraps
def outer(func_name):
    @wraps(func_name)  # 仅仅是为了让装饰器的效果更加逼真 平时可以不写
    def inner(*args, **kwargs):
        """我是inner 我擅长让人蒙蔽"""
        res = func_name(*args, **kwargs)
        return res
    return inner

@outer
def func():
    """我是真正的func 我很强大 我很牛 我很聪明"""
    pass


# help(func)
# print(func)
func()

递归函数

1
.函数的递归调用
	函数直接或者间接的调用了函数自身
 	 # 直接调用
    # def index():
    #     print('from index')
    #     index()
    # index()
    # 间接
    # def index():
    #     print('from index')
    #     func()
    #
    # def func():
    #     print('from func')
    #     index()
    #
    # func()
    '''最大递归深度:python解释器添加的安全措施'''
    # count = 0
    # def index():
    #     global count
    #     count += 1
    #     print(count)
    #     index()
    # index()
    '''官网提供的最大递归深度为1000 我们在测试的时候可能会出现996 997 998'''
    
2.递归函数
	1.直接或者间接调用自己
 	2.每次调用都必须比上一次简单 并且需要有一个明确的结束条件
		递推:一层层往下
  		回溯:基于明确的结果一层层往上
 	 """
    get_age(5) = get_age(4) + 2
    get_age(4) = get_age(3) + 2
    get_age(3) = get_age(2) + 2
    get_age(2) = get_age(1) + 2
    get_age(1) = 18
    """
    def get_age(n):
        if n == 1:
            return 18
        return get_age(n-1) + 2
    res = get_age(5)
    print(res)

练习

'''
1.利用递归函数依次打印列表中每一个数据值
	l1 = [1,[2,[3,[4,[5,[6,[7,[8,]]]]]]]]
2.利用有参装饰器编写多种用户登录校验策略
'''
l1 = [1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]]
def outter(l1):
    for i in l1:
        if type(i) == list:
            outter(i)
        else:
            print(i)
outter(l1)


l2 = [['Maria', '123'], ['jack', '234']]
d1 = {'jason': {'name': 'jason', 'pwd': '123'}, 'kevin': {'name': 'kevin', 'pwd': '234'}}


def outer(a):
    def login_auth(func):
        def inner(*args, **kwargs):
            global l2, d1
            username = input('请输入用户名:').strip()

            # if username in l2:
            #     password = input('请输入密码:').strip()
            #     if a == '1':
            #         if username == 'Tank' and password == '123':
            #             print('登陆成功')
            #             res = func(*args, **kwargs)
            #             return res
            #         print('用户名或密码错误')
            # l2 = set(l2)
            if username in l2[0][0] or username in l2[1][0]:
                password = input('请输入密码:').strip()
                if a == '2':  # 列表
                    for i in l2:
                        if username == i[0] and password == i[1]:
                            print('登陆成功')
                            res = func(*args, **kwargs)
                            return res
                    print('用户名或密码错误')
            elif username in d1:
                password = input('请输入密码:').strip()
                if a == '3':  # 字典
                    if username in d1:
                        b = d1.get(username)
                        name, pwd = b.values()
                        if username == name and password == pwd:
                            print('登陆成功')
                            res = func(*args, **kwargs)
                            return res
                    print('用户名或密码错误')
            # elif a == '4':  # 文件 需要提前创建
            #     with open('text', 'r', encoding='utf8') as f:
            #         for i in f:
            #             name, pwd = i.strip().split('|')
            #             if username == name and password == pwd:
            #                 print('登陆成功')
            #                 res = func(*args, **kwargs)
            #                 return res
            #         print('用户名或密码错误')
            else:
                print('没有')

        return inner

    return login_auth


@outer('3')
def login():
    print('from 字典')


login()


@outer('2')
def login1():
    print('from 列表')


login1()


@outer('1')
def login2():
    print('from 默认')


login2()

标签:index,路程,func,Python,res,Day12,print,return,def
From: https://www.cnblogs.com/HaiMan/p/16786492.html

相关文章

  • 【数据分析】python带你分析122万人的生活工作和死亡数据
    前言嗨喽~大家好呀,这里是魔王呐!闲的无聊的得我又来倒腾代码了~今天给大家分享得是——122万人的生活工作和死亡数据分析准备好了嘛~现在开始发车喽!!@TOC所需素材......
  • python|多维切片之冒号和三个点
    1.前言在torch和numpy中经常会遇到对tensor进行切片操作,如x[...,:3],[:,:2]等,对于:的操作很好理解,与python列表中操作相同。而...就是在切片的过程中自动判断维度的意......
  • python 文件打开,读,写,
    1.open()打开函数在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下open(name,mode,encoding)name:是要打开的目标文件名的字符串(可以包......
  • 2022年第 2 期《Python 测试平台开发》进阶课程(10月30号开学)
    2022年第2期《Python测试平台开发》进阶课程主讲老师:上海-悠悠上课方式:微信群视频在线教学,方便交流本期上课时间:10月30报名费:报名费3800一人(周期3个月,之前学过《pyt......
  • python 装饰器
      ########################################################################################################传统写法,主要功能和辅助功能写在一个函数内####......
  • python基础-较复杂数据类型预览
    1.初识列表  列表就是队列;  列表是一种有序的,且内容可重复的数据类型;  用list代表列表,也可以用list()定义一个列表,同时定义列表可以直接使用[];  python中列......
  • python中的运算函数
    1、abs(x)x的绝对值2、complex(re,im)返回一个复数,re是实部,im是虚部3、c.conjugate()返回c的共轭复数4、pow(x,y)计算x的y次方; pow(x,y,z)先计算x的y次方,然后结果在对z取余5、x......
  • python基础之多层语法糖、函数递归
    python基础之多层语法糖、函数递归目录一、多层语法糖二、装饰器模版三、装饰器修复技术四、函数的递归调用1.函数的递归调用2.递归函数的定义3.递归函数的特点4.递归函数......
  • python 函数装饰器
    今日内容概要作业讲解多层语法糖问题有参装饰器装饰器修复技术递归函数算法之二分法今日内容详细多层语法糖defoutter1(func1):print('加载了outter1......
  • 经典的Python题目【杭州多测师】【杭州多测师_王sir】
    """这个m遍历那个匿名函数每一次遍历到最后都是最大值3,m括号里面的2是传给x的实参双循环打断了,m每次进去出来都取了最后一次的3。m是匿名函数,可以理解为m=[lambdax......