python全栈-Day 13

一、复习

1、函数

  • 函数的定义和调用
  • 函数定义:def 函数名(形参): + 函数体 + 返回值
  • 函数调用:函数名(实参)
  • 站在形参的角度上,有两种参数:位置参数*args,关键之参数**kargs
  • 站在实参的角度上,按照位置传参,按照关键字传参,必须先按照位置传参,按照关键字传参
  • 返回值个数:没有返回值,1个返回值,多个返回值
  • 返回值的接收:没有返回值不接收,1个返回值用一个参数接收,多个返回值用1个或多个参数接收

2、闭包函数

  • 闭包函数的定义:在内部函数引用外部函数的变量

3、装饰器

  • 作用:在不改变原函数的调用方式的情况下,在函数的前后添加新的功能
  • 装饰器完美的符合了一个开发原则:开放封闭原则(对扩展是开放的,对修改是封闭的)
  • 装饰器是闭包函数的一种应用
  • 基础的装饰器
  • 完美的装饰器
  • 带参数的装饰器----三层嵌套函数
  • 多个装饰器装饰一个函数

二、迭代器的一些概念

1、已知的可循环的对象类型:list、dic、str、set、tuple、f.open()、range()、enumerate(枚举)

2、迭代器的标志性特点:可索引、可循环

3、可迭代的几个重要概念

  • 可迭代协议:只要含有__iter__方法的都是可迭代的
  • 能使用for循环的数据类型,就一定拥有__iter__方法,就是可迭代的对象
  • 只有是可迭代对象的时候,才可以用for循环

4、迭代器的几个重要概念

  • 迭代器协议:内部还有__next__和__iter__方法的就是迭代器
  • 只要是迭代器,就一定是可迭代的,但是可迭代的不一定是迭代器
  • 可迭代对象 调用一个__iter__()方法,就得到一个迭代器
  • 迭代器中的__next__()方法,可以从迭代器中一个个取值,for循环其实就是在使用迭代器的__next__()方法

5、迭代器的好处:

  • 从容器中一个个的取值,会把所有的值都取到
  • 节省内存空间(迭代器不会在内存中占用一大块内存,而是随着循环每次生成一个元素)

6、如何确定某个对象是否可迭代??(当我们遇到一个新的变量,不确定能否使用for循环的时候,就判断它是否可迭代)

  • 1、打印对象,结果中告诉你是一个iterator
  • 2、可迭代对象 可以迭代
  • 3、打印对象,结果中返回了一个内存地址,也有可能是可迭代的对象,只要确认对象可使用__iter__方法即可

 三、理解迭代器需要知道的一些知识点

1、#双下方法:带双下划线的方法,指的是已经写好的可以用多种方法调用的方法,如 列表的加法其实就是__add__方法的其他调用形式:

print([1].__add__([2]))
print([1]+[2])

2、使用dir()方法获得 参数可调用的全部方法的列表,如:

print(dir([]))    #获取列表所拥有的全部方法
print(dir({}))
print(dir(''))
print(dir(range(10)))

3、求列表的交集

求交集的方法 只有集合有,所以先要用 set()方法将列表强制转换为 集合,再用 & 符号取交集,结果是一个集合

e = set(dir([])) & set(dir({})) & set(dir('')) & set(dir(range(10)))

 4、可迭代类型的对象 可使用__iter__方法

# 以下几种数据类型是 可迭代的
print('__iter__' in dir(list))
print('__iter__' in dir(dict))
print('__iter__' in dir(set))
print('__iter__' in dir(tuple))
print('__iter__' in dir(enumerate([])))  #枚举
print('__iter__' in dir(range(1)))
# 一下数据类型是 不可迭代的
print('__iter__' in dir(int))
print('__iter__' in dir(bool))
原文地址:https://www.cnblogs.com/txbbkk/p/9732875.html