迭代器

一.函数名的运用

  函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量

  1.函数名的内存地址

  def func():

    print("哈哈")

  print(func)

  结果是 :   <function func at 0x1101e4ea0>

 

  2.函数名可以赋值给其他变量

  def func():

    print("哈哈")

  print(func)

  a = func      # 把函数当成一个变量赋值给另一个函数

  a()               #  函数调用 func()

 

  3.函数名可以当成容器类的 元素

  def func1():

    print("哈哈")

  def func2():

    print("呵呵")

  def func3()

    print("嘻嘻")

  lst = [func1, func2, func3]

  for i in lst:

    i()

 

  4.函数名可以当成函数的参数

  5.函数名可以作为函数的返回值

 

二. 闭包    就是内层函数对外层函数(非全局变量)的变量的应用

def func():

  name = "alex"

  def func1():

    print(name)    ###  闭包

  func1()

func()                             # 结果是 闭包

我们可以使用 __closure__来检验函数是否是闭包,

 

使用函数名.__closure__返回cell就是闭包,返回None 就不是闭包

闭包的作用就是让一个变量能够常驻内存. 供后面的程序使用

 

三 迭代器

s = "我叫哈哈哥"

print(dir(s))       #  可以打印对象中的发放和函数

print(dir(str))    #   可以打印 类中声明的发放和函数

s = "我爱北京天安门"
c = s.__iter__()         # 获取迭代器
print(c.__next__())     # 使用迭代器进行迭代. 获取一个元素    我
print(c.__next__())                                                                  # 爱
print(c.__next__())                                                                  # 北
print(c.__next__())                                                                   # 京
print(c.__next__())                                                                   # 天
print(c.__next__())                                                                  

for 循环的 机制

for i in [1,2,3,4,5,6]

  print(i)

##  试油wile 循环 + 迭代器 来 模拟 for 循环机制

lst = [1,2,3,5,6,9,8,7]

it = lst.__iter__()    #  获取迭代器

while 1:

  tey:

  el = it.__next__()

  print(i)

  except StopIteration

    break

总结:  iterable:可迭代对象,内部包含__iter__()函数

            iterator: 迭代器,内包含__iter__()  和__next__()

迭代器的特点:

1) 省内存

2)惰性机制,你问他要值他才给你,不要不给.

3)不能够反复,只能向下执行

 

posted @ 2018-12-29 15:44  会飞的草帽  阅读(124)  评论(0编辑  收藏  举报