zoukankan      html  css  js  c++  java
  • 函数名的本质,闭包和迭代

    函数名的本质:

    函数名本质上就是函数的内存地址。

    1.函数名可以作为变量:

    def func1():
      print(666)
    f1 = funv1
    f1()
    

    2.函数名可以作为函数的参数

     

    def func1():
        print(666)
    def func2(x):
        x()
    func2(func1)
    

    3.函数名可以作为当作函数的返回值:

    def wraaper():
        def inner():
            print('inner')
        return inner
    ret = wraaper()
    ret()

    4.函数名可以作为容器类类型的元素:

    def func1():
        print('in func1')
    def func2():
        print('in func2')
    def func3():
        print('in func3')
    def func4():
        print('in func4')
    li = [func1,func2,func3,func4]
    for i in l1:
        i()
    

     向上面的函数名:第一类对象

    globals() locals()

    1.globals():返回全局变量的一个字典。

    2.locals():返回当前位置的局部变量的字典

    闭包:

    内层函数对外层函数的变量(非全局变量)的引用,并返回,这样就形成了闭包:

    def wraaaper():
      name = 'alex'
        def inner():
          print(name)
        inner()
        return inner
    wraaper()
    

     功能:当程序执行时,遇到了函数的执行在内存中开辟一个空间,基本名称空间,如果这个函数内部形成了闭包,那么他就不会随着函数的结束而消失。

    可迭代对象

    对象内部含有__iter__方法就是一个对象。可迭代对象就满足可迭代协议,判断一个对象是否时可迭代对象:

    print('__iter__' in dic(s1))
    

      

    from collections imprt Iterable
    print(isinstance('alex,Iterable)) Ture
    

    迭代器

    对象内部含有__iter__方法且含有__next__方法就是一个迭代器。

    可迭代对象vs迭代器

    1.可迭代对象不能取值,迭代器是可以取值的

    2.迭代器非常节省内存

    3.迭代器每次只会取一个值

    迭代器单向的不反复

  • 相关阅读:
    MongoDB 比较运算符 $eq$gt
    leetcode — median-of-two-sorted-arrays
    leetcode — longest-substring-without-repeating-characters
    leetcode — add-two-numbers
    leetcode — two-sum-iii-data-structure-design
    leetcode — two-sum-ii-input-array-is-sorted
    leetcode — two-sum
    linux 命令 — sed
    linux 命令 — 文件相关
    linux 命令 — lsof
  • 原文地址:https://www.cnblogs.com/buchiyudeyang/p/9493289.html
Copyright © 2011-2022 走看看