zoukankan      html  css  js  c++  java
  • Python基础11_函数名运用,闭包,迭代器

    一. 函数名的运用
    函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量
    1. 函数名的内存地址
    2. 函数名可以赋值给其他变量
    3. 函数名可以当做容器类的元素 列表里面可以装函数名
    4. 函数名可以当做函数的参数
    5. 函数名可以作为函数的返回值
    二. 闭包
    闭包就是内层函数对外层(非全局)函数的变量的引用
    我们可以使用__closure__来检测函数是否是闭包,使用函数名.closure ,返回cell就是闭包,返回None就不是闭包
    在函数外调用内部函数,如果是多层嵌套,只需要一层一层往外层返回就行了
    def func1():
    name = "alex"
    def func2():
    print(name)
    return func2
    f = func1()
    f()
    闭包的好处:(1)保护变量不被侵害,(2)保持一个变量常驻内存(局部变量常驻于内存只能闭包)爬虫
    三. 迭代器
    可迭代对象有:str,list,tuple,dict,set range
    iterable可迭代的,
    查看一个对象是否可迭代的方法:
    (1)使用dir()函数查看类中定义好的所有方法,找__iter__函数
    print(dic(list))
    (2)使用isinstance()函数来查看
    lst = [1, 2, 3]
    from collections import Iterable
    print(isinstance(lst, Iterable))
    迭代器:可以被next()函数调用并不断返回下一个值的对象成为迭代器 Iterator
    判断一个对象是否是迭代器:
    from collections import Iterator
    print(isinstance([], Iterator))
    综上,如果对象中有__iter__函数,那么我们认为这个对象遵守了可迭代协议,就可以获取到相应的迭代器,这里的__iter__是帮助我们获取到对象的迭代器,我们使用迭代器中的__next__来获取到一个迭代器中的元素(list,dict,str都是Tterable但不是Iterator,可以通过iter()函数获取到迭代器,再通过next()函数调用并不断返回下一个数据)
    for循环的本质原理:通过不断调用next()函数实现的
    使用while循环和迭代器来模拟for循环,
    lst = [1, 2, 3]
    lst_iter = lst.iter()
    while 1:
    try:
    i = lst_iter.next()
    print(i)
    except StopIteration:
    break
    总结:
    Iterable: 可迭代对象, 内部包含 iter()函数
    Iterator: 迭代器, 内部包含 iter() 同时包含 next()
    迭代器的特点:(1).节省内存.(2).惰性机制(3).不能反复,只能向下执行

  • 相关阅读:
    机器学习中的正则化问题(2)——理解正则化
    详解 Python 中的下划线命名规则
    编程面试的算法概念汇总
    group by多字段查询解决礼物统计
    一分钟学会Spring Boot多环境配置切换
    Maven 多模块父子工程 (含Spring Boot示例)
    第1章 Spring Cloud 构建微服务架构(一)服务注册与发现
    第3章 Spring Boot 入门指南
    第5章 Spring Boot 功能
    第4章 CentOS软件安装
  • 原文地址:https://www.cnblogs.com/guyannanfei/p/10099044.html
Copyright © 2011-2022 走看看