首页 > 其他分享 >day13

day13

时间:2023-12-18 18:01:13浏览次数:26  
标签:__ 迭代 对象 res func day13 def

1.今日内容

今日内容:
    0、有参装饰器
    1、迭代器
    2、生成器
    3、面向过程编程
    4、表达式
        三表达式
        列表生成式
        生成器表达式

2.有参装饰器

import time
current_user={
    'username':None,
    # 'login_time':None
}

# 装饰器最多套三层
def auth(engine):
    # engine='file'
    def auth2(func):
        # func=index
        def wrapper(*args,**kwargs):
            if engine == 'file':
                if current_user['username']:
                    print('已经登陆过了')
                    res=func(*args,**kwargs)
                    return res

                uname=input('用户名>>: ').strip()
                pwd=input('密码>>: ').strip()
                if uname == 'egon' and pwd == '123':
                    print('登陆成功')
                    current_user['username']=uname
                    res=func(*args,**kwargs)
                    return res
                else:
                    print('用户名或密码错误')
            elif engine == 'mysql':
                print('基于MyQL的认证')
            elif engine == 'ldap':
                print('基于LDAP的认证')
        return wrapper
    return auth2

@auth('ldap') #@auth2 #index=auth2(index) #index=wrapper
def index():
    time.sleep(1)
    print('welcome to index page')
    return 122


index() # wrapper()

3.装饰器修复技术

# def index():
#     """index函数 非常的牛"""
#     pass
#
#
# help(index)  # help函数,用来查看帮助信息
# 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()

4.总结装饰器模版

# 总结:有参装饰器模板
# # 1、无参装饰器
# def outter(func):
#     def wrapper(*args,**kwargs):
#         res = func(*args,**kwargs)
#         return res
#     return wrapper
#
# @outter
# def index():
#     pass

# 2、有参装饰器
def outter2(xxx):
    def outter(func):
        def wrapper(*args, **kwargs):
            print(xxx)
            res = func(*args, **kwargs)
            return res

        return wrapper

    return outter


@outter2(xxx=111)
def index():
    pass

index()

5.可迭代对象与迭代器对象

可迭代对象

1.可迭代对象
	对象内置有__iter__方法的都称为可迭代对象
	"""
	1.内置方法  通过点的方式能够调用的方法
	2.__iter__  双下iter方法
	"""
2.可迭代对象的范围
	不是可迭代对象
    	int float bool 函数对象
	是可迭代对象
    	str list dict tuple set 文件对象
3.可迭代的含义
	"""
	迭代:更新换代(每次更新都必须依赖上一次的结果)
		eg:手机app更新
	"""
	可迭代在python中可以理解为是否支持for循环

迭代器对象

1.迭代器对象
	是由可迭代对象调用__iter__方法产生的
	迭代器对象判断的本质是看是否内置有__iter__和__next__
    
2.迭代器对象的作用
	提供了一种不依赖于索引取值的方式
 	正因为有迭代器的存在 我们的字典 集合才能够被for循环
    
3.迭代器对象实操
	 """
	 s1 = 'hello'  # 可迭代对象
     res = s1.__iter__()  # 迭代器对象
     print(res.__next__())  # 迭代取值 for循环的本质
     print(res.__next__())
	 一旦__next__取不到值 会直接报错
	 """
    
4.注意事项
	可迭代对象调用__iter__会成为迭代器对象 迭代器对象如果还调用__iter__不会有任何变化 还是迭代器对象本身

实例.py

d = {'name': 'jason', 'age': 123}
res = d.__iter__()  # res是迭代器对象
print(res)
print(res.__next__())
print(res.__next__())

6.for循环的本质

for 变量名 in 可迭代对象:
    循环体代码
"""
1.先将in后面的数据调用__iter__转变成迭代器对象
2.依次让迭代器对象调用__next__取值
3.一旦__next__取不到值报错 for循环会自动捕获并处理
"""

标签:__,迭代,对象,res,func,day13,def
From: https://www.cnblogs.com/wangmiaolu/p/17911824.html

相关文章

  • day13
    day133.今日概要*作业讲解*多层语法糖问题*有参装饰器*装饰器修复技术*递归函数*算法之二分法4.作业讲解1.编写一个用户认证装饰器函数:registerlogintransferwithdraw基本要求 执行每个函数的时候必须先校验身份eg:jason123拔高练习(有点难......
  • Day13 继承知识点综合
    1.继承java只有单继承关键字:extendsclassA{}//父类classBextendsclassA{}//子类B继承了A类2.继承权限相较于C++的public,protected,private,java对不写继承的default的定义不一样:c++default=privateJava不写则默认是default,是一个新的权限,所以Java有......
  • day133-spring boot常用参数注解
    springboot常用参数注解注解:@PathVariable路径变量@RequestHeader获取请求头@RequestParam获取请求参数(指问号后的参数,url?a=1&b=2)@CookieValue获取Cookie值@RequestAttribute获取request域属性@RequestBody获取请求体[POST]@MatrixVariable矩阵变......
  • Day13 基本运算符
    基本运算符1.掌握下列前四个运算符即可算术运算符:+,-,*,/,%(取余),++,--赋值运算符=关系运算符:>,<,>=,<=,==(Java里面的等于用两个等号),!=(这个表示不等于)instanceof逻辑运算符:&&,||,!(与,或,非)位运算符:&,|,^,~,>>,<<,>>>(了解!!!)条件运算符?:扩展赋值运算符:+=,-=,*=,/=加减乘除同类型packa......
  • day131- springboot 的配置文件yaml的用法
    springboot的配置文件yaml的用法yaml文件同properties文件一样,适合用来做数据为中心的配置文件基本语法key:value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可'#'表示注释字......
  • python Day13
    三种名称空间的介绍 名称空间的嵌套关系 全局作用域 局部作用域 在局部修改全局的名字对应的值:global x修改函数外层函数包含的名字的对应的值:nonlocal ......
  • day130-springboot的各种配置与应用
    编写springboot应用看官方文档DevelopingwithSpringBoot查看场景依赖,引入对应自动配置的场景,编写配置文件中debug=true开启自动配置报告。Negative(不生效)Positive(生效)Lombok的应用Lombok用标签方式代替构造器、getter/setter、toString()等鸡肋代码。引入依赖......
  • day1311
    后缀分类动词后缀-ize(做成;变成;..........化)modernize(现代化)-en(使成为;引起)quicken(加快)-fy(使........化;使成)purify(净化)-ish(使;令)abolish(取消)-ate(成为........;处理)indicate(指示)形容词后缀-able/-ibleflexible(可弯......
  • Day13
    科技发展中的英语词汇工业革命时期英语词汇的特点借词旧词赋新义英语扩张古英语留中古英语引现代英语借词根以及词根的分类什么是词源学?Etymologytheoriginsofwordsthehistoryofwordsthechangingmeaningofwords词源、词根、词缀的关系......
  • LeetCode Day13 239&347
    //利用双端队列手动实现单调队列/***用一个单调队列来存储对应的下标,每当窗口滑动的时候,直接取队列的头部指针对应的值放入结果集即可*单调队列类似(tail-->)3-->2-->1-->0(-->head)(右边为头结点,元素存的是下标)*/239. 滑动窗口最大值classSolution{......