zoukankan      html  css  js  c++  java
  • 从入门到自闭之Python三大器--迭代器

    函数名的第一类对象(概述):

    使用方式:

    • 函数名可以当做值赋值给变量

      def func():
      	print(1)
      print (func)	#查看函数的内存地址
      a = func
      print (a)		#
      
    • 函数名可以当做容器中的元素

      dic = {"1":login,"2":register,"3":index}
      msg = """
      1 登录
      2 注册
      3 主页
      """
      choose = input(msg)   # 1
      if choose.isdecimal():
           if dic.get(choose):
               dic[choose]()
           else:
               print("请正确输入!")
      
      
    • 函数名可以当做函数的参数

      def fuc(a):
      	a()
      	print(111)
      def foo():
      	print(222)
      	def f1()
      		print(333)
      	fun(f1)
      foo()
      

    • 函数名可以当函数的返回值

      def func():
      	def foo():
      		print(111)
      	return foo
      a = func()
      a()
      func()()		#foo()
      输出结果:111
      		111
      

    进阶题:

     def foo(a):
         def func(a):
             def f1(a):
                 print(a)
                 return "aelx"
             return f1(a)
         return func(a)
     print(foo(5))
    输出结果: 5 ,alex
    
     def func(a):
         a()
    
     def foo(b):
         return b()
     def f1(c):
         def a():
             def f3():
                 print(3333)
                 return [f3,a,f1]
             print(11)
             return f3()
         return c(a())
     def aa(b):
         print(111)
         return b
     print(f1(aa))
     输出结果:
    11
    3333
    111
    [<function f1.<locals>.a.<locals>.f3 at 0x00000187D0649C80>, <function f1.<locals>.a at 0x00000187D0649BF8>, <function f1 at 0x00000187D0649AE8>]
    

    def f1(c):
        def a():
            def f3():
                print(3333)
                return [f3,a,f1]
            print(11)
            return f3()
        ret = a()
        return c(ret)
    def aa(b):
        print(111)
        return b
    print(f1(aa))
    

    f-strings

    ​ f"{变量名}"

    ​ F"{变量名}"

    ​ f"""{变量名}"""

    print(F"姓名:{input('name:')} 年龄:{input('age:')}")
    
    def foo():
        print("is foo")
    
    
     lst = [1,2,3,4]
     dic = {"key1":23,"key2":56}
     print(f"""{dic['key1']}""")
    
    
     print(f"{3+5}")
     print(f"{3 if 3>2 else 2}")
    
    
     print(f"""{':'}""")
    
     msg = f"""{{{{'alex'}}}}"""	#必须是偶数
     print(msg)
    
     name = "alex"
     print(f"{name.upper()}")
    
     print(f"{':'}")
    
    

    迭代器:是基于上一次停留的位置,进行取值

    1. 可迭代对象:

      1. list,tuple,str,set,dict取值方式只能直接看、

      2. 只要具有__ iter __()方法就是一个可迭代对象

         lst = [1,23,4,5]
         for i in lst:
             print(i)
        
        
         lst = [1,2,3,4]
         lst.__iter__()
         dict.__iter__()
        
        
    2. 迭代器:工具

      • 具有__ iter __ () 和 __ next __ () 两个方法才是迭代器

      • lst = [1,2,3,4,5]
        l = lst.__iter__()  # 将可迭代对象转换成迭代器
          
        l.__iter__()  # 迭代器指定__iter__()还是原来的迭代器
        print(l.__next__())   # 1
        print(l.__next__())   # 2
        
        
    3. for循环的本质(重点):

       while True:
           try:		#异常处理机制
               print(l.__next__())
           except StopIteration:	#接收到异常提醒就终止
               break
      
      
       lst = []
       for i in range(10000):
           lst.append(i)
      
       l = lst.__iter__()
      
       for i in range(16):
           print(l.__next__())
      
       print(''.center(50,"*"))
      
       for i in range(16):
           print(l.__next__())
      
       print(''.center(50,"*"))
       for i in range(16):
           print(l.__next__())
      
      
    4. 优点:

      • 惰性机制:节省空间
    5. 缺点:

      1. 不能直接查看值 -- 迭代器查看到的是一个迭代器的内存地址
      2. 一次性,用完就没了
      3. 不能逆行,后退,只能继续执行下一条
    6. 空间换时间:容器存储大量的数据,取值快,占用空间大

    7. 时间换空间:迭代器就是一个节省了空间,但是取值慢

    8. 可迭代对象:具有 iter() 方法的就是一个可迭代对象

    9. 迭代器:具有 iter()和next()方法就是一个迭代器

    10. python2和python3中的区别:

      1. python 3
        • iter ()和 __ iter __() 都有
        • next () 和 __ next __ () 都有
      2. Python 2
        • iter ()和 __ iter __()
        • next ()
  • 相关阅读:
    使用Dictionary键值对判断字符串中字符出现次数
    Linq实现字符串拼接多条件查询
    js数据类型转换
    js前端数据类型检测typeof,instanceof,Object.prototype.toString.call
    moment.js格式化日期,获取前一个月的时间
    css 样式中height100%失效问题
    记一次react项目运行崩溃
    null和undefined区别
    windows腾讯云/阿里云服务器更换操作系统为linux
    csrf攻击原理和防御-生成token防御代码
  • 原文地址:https://www.cnblogs.com/heyulong1214/p/11527865.html
Copyright © 2011-2022 走看看