zoukankan      html  css  js  c++  java
  • python值函数名的使用以及闭包,迭代器

    一.函数名的运用

      函数名就是一个变量名,但它是一个特殊的变量名,是一个后面加括号可以执行函数的变量名.

     1 def func():
     2     print("我是一个小小的函数")
     3 a = func
     4 print(a)
     5 
     6 func()
     7 a()
     8 
     9 func = 3
    10 print(func)

      函数名的命名规范与变量的命名规范一样.

      函数名可以作为列表中的元素进行存储.

      可以作为参数传给函数

    def my():
        print("我是my")
    
    def proxy(fn): # 代理模式. 装饰器
        print("在处理之前")
        fn()
        print("在处理之后")
    
    proxy(my) # 把函数名作为参数传递给另一个函数

      可以作为函数的返回值

    1 def func():
    2     print("我是func")
    3     a = 10 # 变量
    4     def inner():
    5         print("我是inner")
    6     return inner
    7 # ret = func()
    8 # ret()
    9 func()() # 先运行func()  然后在返回值上加()

    二.闭包

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

      好处:1.可以保护的变量不受外界影响

         2.可以让变量常驻内存

        语法:

    1 def func1():
    2     a =1
    3     def func()
    4         print(a)
    5     return func()

    三.迭代器

      使用dir来查看该数据包含了那些方法

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

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

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

     1  s = 123
     2 for i in s:
     3     print(i)
     4 print(dir(str)) #  dir查看xx类型的数据可以执行哪些方法, __iter__  iterable
     5 print(dir(list)) # __iter__
     6 print(dir(int)) # 没有__iter__
     7 # 所有的带__iter__可以使用for循环的, 可迭代对象
     8 
     9 # 可迭代对象可以使用__iter__()来获取到迭代器
    10 # 迭代器里面有__next__()
    11 s = "石可心喜欢赵一宁"
    12 it = s.__iter__() # 获取迭代器
    13 print(dir(it)) # 迭代器里有__iter__ 还有__next__
    14 
    15 print(it.__next__()) #
    16 print(it.__next__())    #
    17 print(it.__next__())#
    18 print(it.__next__())#
    19 print(it.__next__())#
    20 print(it.__next__())#
    21 print(it.__next__())#
    22 print(it.__next__())#

      迭代器的特点:

        1.只能向前

        2.惰性机制

        3.省内存(生成器)

      for循环的内部机制

        1. 首先获取到迭代器

        2.使用while循环获取数据

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

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

    1 it = xx.__iter__()
    2 while 1:
    3     try:
    4         data = it.__next__()
    5         xxxxx
    6     except StopIteration:
    7         break
  • 相关阅读:
    ascii、unicode、utf-8、gbk 区别?
    python递归的最大层数?
    线程
    为何基于tcp协议的通信比基于udp协议的通信更可靠?
    什么是局域网和广域网?
    通过代码实现如下转换 ?
    TCP和UDP的区别?
    什么是ARP协议?
    PEP8 常用规范
    b、B、KB、MB、GB 的关系?
  • 原文地址:https://www.cnblogs.com/baijinshuo/p/9455551.html
Copyright © 2011-2022 走看看