zoukankan      html  css  js  c++  java
  • python全栈day11

      

    01 函数名的应用

    理解:可以理解为特殊的变量
      1.函数名等同于函数的内存地址
      2.函数名可以作为变量

    def func1():
        print(666)
    f1 = func1    #将函数名func1赋值给f1
    f2 = f1    #再继续将值赋给f2
    f2()      #执行

     

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

    def func1()
        print(666)
    
    def func2()
        x()
    func2(func1) #实参为函数名

      

      4.函数名可以当做函数的返回值

    def wrapper():
        def inner():
            print('inner')
            return 666
        return inner             #外部函数将内部函数的函数名当做返回值
    
    ret = wrapper()
    ret()        
    

      

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

    第一类对象:  1.可在运行期创建     2.可用作函数参数或返回值       3.可存入变量的实体。

    上述的函数和后面要介绍的类就是第一类对象

    02 闭包

    定义:

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

    闭包的作用:
      当程序执行时,遇到了函数执行,他会在内存中开辟一个空间——局部名称空间,如果这个函数产生闭包,那么他就不会随着函数结束而消失。

    def wrapper():
        x = 0
        def inner():
            nonlocal x
            a = x
            x += 1
            return a
        return inner      #产生闭包
    
    f1 = wrapper()        #将外部函数赋值给变量
    print(f1())               #0
    print(f1())               #1
    print(f1())               #2
    

      

    03 可迭代对象
      补充:dir()以列表的形式返回该类型数据的所有方法。
      从源码的角度考虑:对象内部含有__iter__方法的就是可迭代对象。

    判断方法1:

    s = '1234567'       #判断字符串是否是可迭代对象
    print('__iter__' in dir(s))
    

      

    04 迭代器
      从源码的角度考虑:对象内部含有__iter__方法,并且含有__next__方法就是迭代器。
      可迭代对象---->迭代器

    lis = [1,2,3,4,5]
    iter_lis = lis.__iter__()       #方法一
    iter_lis2 = iter(lis)           #方法二
    

      补充判断方法:

    from collections import Iterable
    from collections import Iterator
    
    print(isinstance('Abner',Iterable))         #返回True表面元素为可迭代对象
    print(isinstance('Abner',Iterator))         #返回False表面元素不是迭代器
    

      

      迭代器的优缺点

      优点:

        1.可以不通过索引或者关键字取值

        2.节省内存空间

      缺点:

        1.无法获取迭代长度,在没有执行到末尾之前

        2.不能回头反复,必须一路走到头

      可迭代对象和迭代器区别:
        1.可迭代对象是不能取值的,而迭代器可以。
        2.迭代器非常节省内存
        3.迭代器每次只会取一个值
        4.迭代器只能单向的,不反复。
      应用:
        1.数据量大
        2.单纯的取值


    05 while循环模拟for循环机制

    s = 'sadhada'
    for i in s:
        print(i)          #for循环
    
    iter_s = s.__iter__()
    while 1:                            #利用while循环模拟for循环遍历机制
        try:
            print(iter_s.__next__())
        except:
            StopIteration                   #异常处理
            break
    

      

  • 相关阅读:
    elasticsearch
    CentOS6.9安装Logstash
    CentOS6.9安装Filebeat监控Nginx的访问日志发送到Kafka
    openresty capture
    CentOS6.9安装socat
    CentOS挂Windows的NFS备忘
    openCV 备忘
    rabbitmq更换数据文件和日志文件的存放位置
    根据某个文件或文件夹自制rpm包
    checkinstall打包工具使用
  • 原文地址:https://www.cnblogs.com/abner28/p/9493406.html
Copyright © 2011-2022 走看看