函数进阶(二) day13

目录

  • 昨日内容
    • 闭包函数
    • 装饰器
      • 二层装饰器
      • 装饰器模板
      • 三层装饰器
  • 今日内容
    • 迭代器
      • 可迭代对象
      • 迭代器对象
      • for循环原理(迭代循环)
    • 三元表达式
    • 列表推导式
    • 字典生成式
    • 生成器
      • yield关键字
      • yield的三个特性
    • 递归

昨日内容

闭包函数

把函数和变量包到另一个函数里面

装饰器

  1. 本质是函数,给函数添加功能
  2. 不改变被装饰函数的源代码
  3. 不改变被装饰函数的调用方法

二层装饰器

装饰器模板

def deco(func):
    def wrapper(*args,**kwargs):
        # 要添加的功能
        res = func(*args,**kwargs)
        return res
    return wrapper

@deco  # index = deco(index)
def index():
    pass

三层装饰器

给二层装饰器传参

今日内容

迭代器

可迭代对象

含有__iter__方法就叫做可迭代对象

除了数字类型,所有数据类型都是很可迭代对象

迭代器对象

含有__iter____next__方法的就是迭代器对象

只有文件是迭代器气对象

提供了不依赖索引取值的手段(迭代器的作用)

for循环原理(迭代循环)

dic = {'a':1,'b':2,'c':3}
dic_iter = dic.__iter__()
while True:
    try:
        print(dic_iter.__next__())
    except StopIteration as e:
        break

三元表达式

print(x)if x > y else print(y)

三元表达式只支持双分支结构

列表推导式

lt = [i**2 for i in range(4)]  # 0,2,4,9
lt = [i**2 for i in [1,2,3,4]]

字典生成式

dic = {'a':1, 'b':2}
dic1 = {i for i in dic}  # {'a','b'}
dic2 = {k*2:v**2 for k,v in dic.items()}  # {'aa':2, 'bb':4}


z = zip([1,2,3,4],[1,2,3,4])

dic = {k**2:v**2 for k,v in z}  # {1:1,2:2,3:3,4:4}

字典表达式一般与zip(拉链函数)列表里面包了元组连用

生成器

含有yield关键字的函数叫做生成器

def f():
    yield
# 生成器本质是迭代器    

yield关键字

yield的三个特性

  1. yield会暂停函数,当运行下一次next时才会继续运行下面的代码
  2. 通过next取值

return的特性

  1. 终止函数
  2. 通过调用函数拿到值

递归

函数f内部直接或间接调用函数a本身

def f():  # 死递归
    a = 1
    f()
f()   

每一次递归不会结束函数,并且每一次递归都会开辟新内存空间

真正的递归必须要有退出条件

count = 0
def a():
    global count
    count += 1
    print(count)
    if count == 100:
        return
    a()
a()   

你可能感兴趣的:(函数进阶(二) day13)