zoukankan      html  css  js  c++  java
  • 函数名的使用以及第一类对象,闭包,迭代器

    一丶函数的名的应用(第一类对象)

        函数名的命名规范和变量是一样的

      1.可以做列表中的元素进行存储

    def func1():
        pass
    def func2():
        pass
    lst = [func1, func2]
    for el in lst:
        el()

      2.可以作为参数传递给函数.

    def func():
        pass
    def proxy(fn):
        fn()
    proxy(func)

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

    def func():
        def inner():
            pass
        return inner
    func()()

      4.函数名的内存地址

    def func():
        print("呵呵")
    print(func)
    
    结果为:
    <function func at 0x0000022951B03E18>

    二丶闭包

        闭包:在内层函数中访问外层函数的局部变量

        好处:

          1.保护变量不受外界影响

          2.可以让变量常驻内存

        写法:

    def outer():
        a = 10
        def inner():
            print(a)
        return inner

        如何判断是不是闭包,可以用__closure__来检测函数是否是闭包,使用函数名__closure__返回cell就是闭包,返回None就不是闭包

    def func1():
        name = "alex"
        def func2():
            print(name)
        func2()
        print(func2.__closure__) #(<cell at 0x0000023BA6A6B498: str object at 0x0000023BA6AFA7A0>,)
    func1()

    三丶迭代器

        用来遍历列表,字符串,元组........可迭代对象

    #对的
    s = "abc"
    for c in s:
        print(c)
    
    #错的
    for i in 123:
        print(i)

      注意看报错信息中有这样一句话:'int' object is not iterable,翻译过来就是整数类型对象是不可迭代的,iterable表示可迭代的,表示可迭代协议,那么如何进行验证你的数据类型是否符合可迭代协议,我们可以通过dir函数来查看类中定义好的所有方法.

    s = "我的哈哈哈"
    print(dir(s))       #可以打印对象中的方法和函数
    print(dir(str))     #也可以打印类中声明的方法和函数

       在打印结果中,寻找 __iter__如果能找到,那么这个类的对象就是一个可迭代对象. 

      

        可迭代对象:Iterable,里面有__iter__()可以获取迭代器,没有__next__()

        迭代器:  Iterator,里面有__iter__()可以获取迭代器.,还有__next__()

     

        迭代器特点:

          1.只能向前

          2.惰性机制

          3.省内存(生成器)

      

        for循环的内部机制.

          1.首先获取到迭代器

          2.使用while循环获取数据

          3.it.__next__()来获取数据

          4.处理异常  try:XXXX  except StopIteration:

    it = xx.__iter__()
    while 1:
        try:
            data = it.__next__()
            xxxx
        except StopIteration:
            break
  • 相关阅读:
    SQL Server的Execute As与连接池结合使用的测试
    为什么SQL语句Where 1=1 and在SQL Server中不影响性能
    [转]NGINX下配置CACHE-CONTROL
    ls列出当前目录包含子目录下面的所有文件的绝对路径
    [转]无法滚动到溢出容器的Flex项的顶部
    align-items和align-content的区别
    go实现快速排序
    [转]linux超级服务器inetd详解
    makefile 小记
    [转]gcc
  • 原文地址:https://www.cnblogs.com/qicun/p/9455845.html
Copyright © 2011-2022 走看看