day12-三大神器作业

总结

  • 迭代器(iter)

    • 迭代器是容器型数据类型,获取迭代器的元素,会导致这个元素从迭代器中小时,元素取一个就少一个,有用的点:元素取一个就少一个
    • 迭代器产生:1)将其他序列转换成迭代器; 2)创建生成器
    • 获取迭代器中的元素:
      • 获取单个: next(迭代器 ) ---- 在空的迭代器中获取会报错
      • 遍历
  • 生成器

    • 生成器保存数据的本质不是保存数据本身,而是保存产生数据的算法
    • 创建生成器
      • 调用带有yield关键字的函数,就可以得到一个生成器
      • 调用带yield关键字函数的时候不会执行函数体,也不会获取函数返回值,只是单纯的创建一个生成器
      • 一个生成器能产生多少数据,取决于执行函数的过程中会遇到几次yield,每次遇到yield的时候,yield后面的数就是产生的数据
      • 当通过生成器对象获取元素时,系统会自动执行生成器对应的函数,执行函数的时候不会直接将整个函数执行完,而是每次在执行yield的时候就会停下来,并且将yield的数据作为结果返回,下次再获取元素就从上次结束的为止开始执行.
  • 装饰器

    • 装饰器=实参高阶函数+返回值高阶函数+糖语法
    • 作用:给已经定义好的函数添加功能
def 装饰器名称(fn):
    def new_fn(*args,**kwargs):
        新功能
        result = fn(*args,**kwargs)   # 调用原函数
        return result
    return new_fn
  • 递归函数

    • 在定义函数的时候调用函数本身

    • 循环能做的事情,递归都能做.但实际上能用循环做的事情,绝不用递归

    • 使用递归解决问题时:内存的消耗会随着循环次数的增加而不断增加

    • 使用递归的套路:

      第一步:找临界值,在临界值的位置让函数结束,n至少取
      第二步:找关系,找上一次循环结束的结果和当次循环结束的结果的关系
      第三步:假设函数功能已经实现,通过关系用f(n-1)实现f(n)的功能

  1. 为函数写一个装饰器,在函数执行之后输出 after
def inpute_after(fn):
    def new_fn(*args, **kwargs):
        result = fn(*args, **kwargs)
        print('after')
        return result
    return new_fn

@inpute_after
def func1():
    return 10
  1. 为函数写一个装饰器,把函数的返回值 乘2再返回值
def return_2(fn):
    def new_return_2(*args, **kargs):
        result = fn(*args, **kargs)

        return result * 2
    return new_return_2

@return_2
def func3():
    return 20
  1. 写一个装饰器@tag要求满足如下功能:
@tag
def render(text):
    # 执行其他操作
    return text

@tag
def render2():
    return 'abc'

print(render('Hello'))   # 打印出: <p>Hello</p>
print(render2())     # 打印出: <p>abc</p>

def tag(fn):
    def new_tag(*args, **kargs):
        result = fn(*args, **kargs)
        return '<p>'+result+'</p>'
    return new_tag

@tag
def render2():
    return 'abc'

print(render2())

  1. 写一个创建一副扑克牌的生成器。
def squeezer():
    flower = ['红桃', '梅花', '黑桃', '方块']
    num = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
    kings = ['大王', '小王']
    for y in flower:
        for x in num:
            yield y+x
    yield '大王'
    yield '小王'
  1. 使用递归函数画出以下图形:

    n = 5
    *****
    ****
    ***
    **
    *
    
    
    n = 4
    ****
    ***
    **
    *
    def func3(x):
        if x > 1:
            print('*' * x)
            func3(x - 1)
        else:
            print('*')
        return
    
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值