zoukankan      html  css  js  c++  java
  • Python函数名应用/闭包/迭代器/

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

        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("呵呵")
    def func4():
        print("呵呵")
    lst = [func1, func2, func3]
    for i in lst:
        i()

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

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

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

    def func_1():
        print("这里是函数1")
        def func_2():
            print("这里是函数2")
        print("这里是函数1")
        return func_2
    fn = func_1() # 执行函数1. 函数1返回的是函数2, 这时fn指向的就是上面函数2
    fn() # 执行上面返回的函数

    2. 闭包
      什么是闭包? 闭包就是内层函数, 对外层函数(非全局)的变量的引用. 叫闭包

    def outer():
      a = 10 # 很耗时
      def inner():
        print(a)
      return inner
    # outer()()
    # outer()()
    ret = outer()
    ret()
    ret()
    注意:我们可以使用__closure__来检测函数是否是闭包. 使用函数名.__closure__返回cell就是闭包. 返回None就不是闭包
    def func1():
        name = "disman"
        def func2():
            print(name) # 闭包
    func2()
    print(func2.__closure__) # (<cell at 0x10c2e20a8: str object at 0x10c3fc650>,)
    func1()

    闭包好处:
      1. 保护变量
      2. 可以让一个变量常驻内存
      3. 迭代器
        __iter__() 可迭代对象. 获取迭代器
        __next__() + __iter__() 迭代器

      特点:
        1. 惰性机制
        2. 只能向前
        3. 节省内存
      for循环的内部就是迭代器

    lst = [1,2,4]
    it = lst.__iter__() # 获取迭代器
    while 1:
      try:
          it.__next__() # 从迭代器中获取数据
      except StopIteration:
        break

    Iterable: 可迭代的
    Iterator: 迭代器

  • 相关阅读:
    数据结构(一)之HelloWord
    关于玩QQ消息导入导出功能的感想!
    关于java.lang.IllegalStateException
    Error querying database. Cause: java.sql.SQLException: ORA-01745: 无效的主机/绑定变量名
    关于SVN更新时文件加锁的小结
    项目中和时间相关的要注意的地方
    项目开发中遇到的小问题及小规范
    世界各国的谷歌网址
    非常不错的IT进阶站点
    CSS 垂直居中
  • 原文地址:https://www.cnblogs.com/shagudi/p/10949205.html
Copyright © 2011-2022 走看看