Python函数之迭代器

2021年11月21日 阅读数:15
这篇文章主要向大家介绍Python函数之迭代器,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、Python迭代器python

 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())

2、闭包函数

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

# 闭包内层函数调用外层的变量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()()())

3、迭代器code

# 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.一、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循环机制blog

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__()函数
# 
# 迭代器:节省内存,惰性机制,不能反复 只能向下执行.

4、递归函数递归

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

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

# 经过报错信息来查看递归执行层数
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))