zoukankan      html  css  js  c++  java
  • 11.Python初窥门径(函数名,可迭代对象,迭代器)

    Python(函数名,可迭代对象,迭代器)

    一、默认参数的坑

    # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是.
    def func(a,l=[]):
        l.append(a)
        return l
    print(func(1)) # [1]
    print(func(2)) # [1,2]
    print(func(3)) # [1,2,3]
    

    二、函数名的应用

    1. 函数名指向的是函数的内存地址,加上()就执行这个函数

      def func(args):
          return args
      print(func) # <function func at 0x00000000024656A8>
      print(func(1)) # 1
      
    2. 函数名是一个变量

      def age1(a):
          return a
      age2=age1
      age3=age2
      print(age3(1)) # 1
      
    3. 函数名可以作为容器类类型的元素

      def func1():
      	print("in func1")
      def func2():
      	print("in func2")
      def func3():
      	print("in func3")
      l=[func1,func2,func3]
      print(l) # [<function func1 at 0x00000000024956A8>, <function func2 at 0x0000000002495730>, <function func3 at 0x00000000024957B8>]
      for i in l:
      	i()
      # in func1
      # in func2
      # in func3
      
    4. 函数名可以作为函数的实参进行传参

      def func(argv):
      	print(argv)
      def func1():
      	print("in func1")
      def func2(argv):
      	argv()
      	print("in func2")
      a=1
      func(a) # 1 
      func2(func1) 
      # in func1
      # in func2
      
    5. 函数名可以作为函数的返回值

      def func1():
      	print("in func1")
      def func2(argv):
      	print("in func2")
      	return argv
      ret=func2(func1)
      print(ret) 
      # in func2
      # <function func1 at 0x0000000001DF56A8>
      

    三、可迭代对象

    1. 字面意思分析 : 可以重复迭代的实实在在的东西,list,dict,keys(),values(),tuple,str,set,range,文件句柄这些都属于可迭代对象

    2. 专业角度分析 : 内部含有'_ iter _'方法的对象,就是可迭代对象

      内置函数 : dir()用来获取对象内部属性的方法,可用来判断对象是否符合可迭代要求.

    3. 优点 : 直观,操作方法较多

    4. 缺点 : 占用内存(字典除外),不能迭代取值,索引,字典key

    四、迭代器

    1. 字面意思分析 : 可以重复迭代的工具

    2. 专业角度分析 : 内部含有'_ iter_ '并且含有'_ next _'方法的对象,就是迭代器

      可迭代对象转化成迭代器用iter(),迭代器可以迭代取值,利用next()进行取值,迭代器一条路走到底,不走回头路

    3. 优点 : 非常节省内存,惰性机制

    4. 缺点 : 不直观,操作不灵活,效率相对低

      l1=[1,2,3,4,5]
      obj=iter(l1)
      print(next(obj)) # 1
      print(next(obj)) # 2
      print(next(obj)) # 3
      print(next(obj)) # 4
      print(next(obj)) # 5
      print(next(obj)) # 报错
      

    利用while循环,模拟for循环内部循环可迭代对象机制

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

    2. 利用next()对迭代器进行取值

    3. 利用异常处理try,处理报错

      l1=[1,2,3,4,5]
      l2=iter(l1)
      while 1:
          try:
              print(next(l2))
          except StopIteration:
              pass
      

    五、可迭代对象与迭代器对比

    1. 可迭代对象是一个操作比较灵活,直观,效率相对较高,但是比较占用内存的数据集
    2. 迭代器是一个非常节省内存,满足惰性机制,但是效率相对较低,操作不灵活的数据集
  • 相关阅读:
    用Vue创建一个新的项目
    事件循环学习2
    事件循环学习笔记
    关于访问器属性
    bootstrap-datetimepicker时间控件
    前端的指导方针---css篇
    web移动端小tip,box-flex
    数组常用的几种方法
    ajax对一些没有接口的数据进行分析和添加方法
    JAVA静态代理和动态代理理解
  • 原文地址:https://www.cnblogs.com/chenshuo531702820/p/11052025.html
Copyright © 2011-2022 走看看