Python函数之迭代器

一、Python迭代器

 1.1、函数的运用

# 直接使用函数名其打印效果为函数在内存的地址
def f():
    print("Its Ok")

print(f)

# 函数名可以直接赋值给一个变量来使用
def f():
    print("aaaa")
    print(f)

x = f   #把函数名赋值给一个变量来使用
print(x())

# 把函数名来当一个容器使用
def x():
    print("aaaa")
def y():
    print("bbbb")
def z():
    print("cccc")

lis = [x,y,z]
for i in lis:
    print(i())

# 函数名可以当作函数的参数来使用
def x():
    print("aaaa")

def y(z):
    print("yyyyy")
    z()
    print("yyyy...")

y(x)

# 函数名可以作为函数的返回值
def x():
    print("aaaa")
    def y():
        print("bbb")
    print("aaa....")
    return y

z = x()
print(z())

二、闭包

闭包就是内层函数调用外层函数的变量(非全局)引用为闭包

# 闭包内层函数调用外层的变量a引用就成为闭包
def f():
    a = "aaaa"
    def x():
        print(a)
    x()

print(f())

# 闭包内层函数调用外层的变量a引用就成为闭包
def f():
    a = "aaaa"
    def x():
        print(a)
    x()
    print(x.__closure__)    #其结果显示为cell 非None为闭包,如返回None则不是闭包
print(f())

def x():
    a = "Its OK"
    def y():
        print(a)
    return y

z = x()
print(z())

##
def x():
    def y():
        a = "111111"
        def z():
            print(a)
        return z
    return y

print(x()()())

三、迭代器

# str、list、dict、tuple、set都是可迭代的对象
# dict字典在迭代过程中为Key
# 列表 li = [1,2,3,4] print(dir(li)) # 字典 dic = {"x":1,"y":2,"z":3} print(dir(dic)) # 元组 s = ("a","b") print(dir(s)) # 集合 se = (1,2,4,5,5) print(dir(se)) # 查看对象是否是可迭代对象,可以通过isintensce()函数来查看对象是什么类型 ls = [1,2,3,4] l = ls.__iter__() from collections import Iterable from collections import Iterator print(isinstance(ls,Iterable)) print(isinstance(ls,Iterator)) print(isinstance(l,Iterable)) print(isinstance(l,Iterator))

3.1、for循环机制

x = "收到噶打工啊阿凡达"
y = x.__iter__()    #获取一个迭代器

print(y.__next__())     #依次迭代 获取元素
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())
print(y.__next__())

使用while循环和迭代器来模拟for循环机制

ls = [1,2,3,4,5]
x = ls.__iter__()

while 1:
    try:
        y = x.__next__()
        print(y)
    except StopIteration:
        break

# Iterable:可迭代对象,包含__iter__()函数
# Iterator:迭代器,包含__iter__()和__next__()函数
# 
# 迭代器:节省内存,惰性机制,不能反复 只能向下执行.

四、递归函数

是在函数里调用这个函数本身为递归函数,当函数不受外力阻止会一直执行下去,每次调用函数都会产生一个属于自己都命名空间。

此就会占用太多内存空间,为此python将强制递归层数控制在996左右(具体根据个人电脑通过报错信息还来查看,此值不是固定值)

# 通过报错信息来查看递归执行层数
def x(n):
    print(n)
    n += 1
    x(n)

x(0)
# 递归循环思路,带入一次函数体,直至满足函数体条件,然后返回retur
def f(n):
    if n == 1:
        return 40
    else:
        return f(n-1)+2

print(f(4))

 

posted @ 2019-03-16 11:51  A裴小汪  阅读(380)  评论(0编辑  收藏  举报