函数复习

带参装饰器?

  作用:关闭装饰器

实例

# 带参数的装饰器:(相当于开关)为了给装饰器传参
# F=True#为True时就把装饰器给加上了
F=False#为False时就把装饰器给去掉了
def outer(flag):
    def wrapper(func):
        def inner(*args,**kwargs):
            if flag:
                print('before')
                ret=func(*args,**kwargs)
                print('after')
            else:
                ret = func(*args, **kwargs)
            return ret
        return inner
    return wrapper

@outer(F)#@wrapper
def hahaha():
    print('hahaha')

@outer(F)
def shuangwaiwai():
    print('shuangwaiwai')

hahaha()
shuangwaiwai()

可迭代对象?

  可以被for循环的都是可迭代的,要想可迭代,内部必须有一个__iter__方法。

  有哪些:字符串、列表、元组、字典、集合

迭代器

必须拥有__iter__方法和__next__方法。 

迭代器优点

  1 节省内存,同一时刻只出现一条数据,节省内存空间

  2 取值过程单向不可逆

for循环,能遍历一个可迭代对象,他的内部到底进行了什么?

  • 将可迭代对象转化成迭代器。(可迭代对象.__iter__())
  • 内部使用__next__方法,一个一个取值。
  • 加了异常处理功能,取值到底后自动停止。

用while循环模拟for循环:

l = [1,2,3,4]
l_iter = l.__iter__()
while True:
    try:
        item = l_iter.__next__()
        print(item)
    except StopIteration:
        break

将可迭代的转化成迭代器   迭代器 = 迭代器.__iter__()

为什么使用迭代器:方便我们遍历可迭代对象中的元素,获取每一个元素

判断迭代器,还是可迭代对象?

  print('__next__' in dir(s))

  应用模块 collections  

from collections import Iterable 可迭代对象
from collections import Iterator 迭代器
print(isinstance('',Iterable)) 判断是否是可迭代对象
print(isinstance('',Iterator)) 判断收费是迭代器

生成器

本质上是一个迭代器,

内置函数

python提供给你直接可以拿来使用的所有函数。

dir() 查询内部方法

enumertae:枚举,返回索引与值的元组
zip:拉链函数,接收多个可迭代对象,将对象相同索引位置放在一个元组中,返回一个迭代器,返回迭代器中元素个数由最短的可迭代对象决定
filter:过滤函数,接收一个函数和一个可迭代对象,生成一个迭代器.将可迭代对象的每一个元素带入函数中,如果返回结果为True,则把元素添加入迭代器中
map:处理函数,接收一个函数和一个可迭代对象,生成一个迭代器,将可迭代对象的每一个元素带入函数中,把返回值添加入迭代器中
callble:判断参数是不是可调用的
dir:查看内置属性和方法的字符串
super:根据__mro__属性去查找方法
isinstance:判断一个对象是不是这个类实例化出来的
iscubclass:判断一个类是不是另一个类的子类,也可以判断两个类是不是相同的类

原文地址:https://www.cnblogs.com/benson321/p/10059946.html