day 12 函数名的应用 闭包 迭代器

今日主要内容
1,   函数名的应用,第一类对象
  函数名可以像变量一样进行使用   #再函数名后面添加() 才是对函数的调用, 否则打印的是函数的内存地址

  1.赋值
  2.作为list元素
  3.作为参数

def func():
    print("吃了了么")
def func2(fn):
    print("我是func2")
    fn()                 # 执⾏行行传递过来的fn
    print("我是func2")
func2(func)           # 把函数func当成参数传递给func2的参数fn

  4.作为返回值

2, 闭包
  内部函数访问外部函数的局部变量.:(闭包就是内层函数, 对外层函数(非全局)的变量量的引⽤用. 叫闭包 )

    作用:可以让一个变量常驻内存 

def func():
    name = "alex"         #常驻内存
    def inner()
        print(name)          #在内层函数中调用了外层函数
   print(inner.__closure__)      #查看inner是否是闭包,返回有东西是闭包,没闭包返回None
  return inner a =func a()()

闭包的检测

    使用__closure__来检测函数是否是闭包. 使⽤用函数名.__closure__返回cell就是
  闭包. 返回None就不是闭包

可以实现再函数外边调用内部函数

例:

def outer():
    name = "alex"
    def inner():
        print(name)  #闭包
    return inner
fn = outer()    # 访问外部函数, 获取到内部函数的函数地址
fn()            #访问内部函数

好处:
  1.安全              放在局部内,防止其它程序更改变量。所以不要把变量放在全局内
  2.常驻内存. 提高效率        随时可能使用
  3, 迭代器
可迭代对象(Iterable):内部包含__iter__().
迭代器(Iterator): 内部含有__iter__() __next__()
str, list, tuple, set, dict
f, range

迭代器的特点:
  1.省内存
  2.惰性机制
  3.只能向前.

原文地址:https://www.cnblogs.com/xiaobai686/p/11644403.html