• 函数名的应用


    1:函数名的应用

      1.函数名就是函数的内存地址。

    def func():
        pass
    print(func)
    

      2.函数名可以作为变量

    def num():
        def num1():
            print(33)
        num1()
    f1 = num
    f1()
    

      3.函数名可以作为参数:

    def num():
        print(123)
    def num1(x):
        x()
    m = num
    num1(m)
    

      4.函数命可以作为返回值。

    def num():
        print('我运行')
    def inner(x):
            print('233')
            return x
    s = inner(num())
    

      5.函数类可以作为容器类类型数据的元素。

      

    def num1():
        print('111')
    def num2():
        print('222')
    def num3():
        print('333')
    def num4():
        print('444')
    l = [num1,num2,num3,num4]
    for i in l:
        i()
    

    2:globals(),locals()

      globals()返回全局变量中的一个,locals()返回局部变量中的一个字典

      

    def func1():
        # a = 2
        # b = 3
        # print(globals())
        # print(locals())
        def inner():
            c = 5
            d  =6
            print(globals())
            print(locals())
        inner()
    # print(globals())
    # print(locals())
    func1()
    

    3.闭包

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

    def wraaper():
        name = "alex"
        def inner():
            print(name)
        print(inner.__closure__)
        inner()
        return inner()
    wraaper()
    

      2.闭包的作用:当程序执行时遇到函数,会在内存空间开辟一个局部命名空间,如果这个函数形成了闭包,它不会随着函数结束而关闭。

    如,网页爬取时,形成闭包,那么爬取的数据一直都是使用同一个局部空间,从而节省内存。

    4.可迭代对象:

      1.对象内部含有__iter__方法的就是可迭代对象。可迭代对象满足可迭代协议。

      2.可迭代对象:tuple,str,dict,list.range

      3.判断一个对象是否可迭代。

           

    s1 = 'asdf'  #方法1
    dic = {'name':'黎明'}
    print('__iter__' in dir(s1))
    print('__iter__' in dir(dic))
    

    5.迭代器: 

      1.什么是迭代器:对象内部含有__iter__ 切含有  __next__方法的就是迭代器。

      

    f = [1,2,3,45,6,7]
    f1  = f.__iter__()
    print('__iter__' in dir(f1))
    print('__next__' in dir(f1))

      2.
            可迭代对象vs迭代器
    可迭代对象不能取值,迭代器是可以取值的。
    可迭代对象 --->(转化成)迭代器
      
    # lis = [1,2,3,4]
    # # lis1 = lis.__iter__()  #可迭代对象转化为迭代器,方法1
    # lis1 = iter(lis)  #可迭代对象转化为迭代器,方法2
    # print('__iter__' in dir(lis))
    # print('__next__' in dir(lis))
    # print('__iter__' in dir(lis1))
    # print('__next__' in dir(lis1))
    

      3 迭代器如何取值? next一次,取一个值

        

    print(ite1.__next__())
    print(ite1.__next__())
    print(ite1.__next__())
    print(ite1.__next__())
    

      4.

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

        2.迭代器是非常节省内存。

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

        4.迭代器是单向的,一条路走到头。

      5.

        1.将可迭代对象转化成迭代器。

        2.调用__next__方法取值

        3.利用异常处理停止报错

    iter1 = s1.__iter__()
    while 1:
        try:
            print(iter1.__next__())
        except StopIteration:
            break
    

      

    
    

      

      

  • 相关阅读:
    【Git】rebase 用法小结(转)
    修饰符访问权限。
    throws与throw关键字。
    多线程,同步代码块。
    多线程,设置线程的优先级。
    多线程,加入线程。
    多线程,守护线程。
    多线程,休眠线程。
    多线程,获取当前线程的对象。
    多线程获取名字和设置名字。
  • 原文地址:https://www.cnblogs.com/lijinming110/p/9495234.html
Copyright © 2020-2023  润新知