一 、 函数名的运用

  函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量。

  1、函数名的内存地址

  

  def func():

    print("呵呵")

  print(func)

  结果:

  <function func at 0x1101e4ea0>

  

  2、函数名可以赋值给其他变量

  def func():

    print("呵呵")

  print(func)

  a = func    # 把函数当成一个变量赋值给另一个变量

  a()      # 函数调用 func()

  

  3、函数名可以当做容器类的元素

  def func1():

    print("呵呵")

  def func2():

    print("呵呵")

  def func3():

    print("呵呵")

  def func4():

    print("呵呵")

  lst = [func1, func2, func3]

  for i in lst:

    i()

  4、函数名可以当做函数的参数

  

  

  5、函数名可以作为函数的返回值

  

二、闭包

 1、 什么是闭包?闭包就是内层函数,对外层函数(非全局)的变量的引用。叫闭包

  def func1():

    name = "alex"

    def func2():

      print(name)    # 闭包

    func2()

  func1()

  结果:

  alex

    

2、我们可以使用__closure__来检测函数是否是闭包.使用函数名.__closure__  返回cell就是闭包。返回None就不是闭包def func1():    name = 'alex'    def func2():        print(name)    func2()    print(func2.__closure__)func1()结果:(<cell at 0x00000248D5C77618: str object at 0x00000248D5D07068>,)

 3、如何在函数外边调用内部函数

def outer():

  name = 'alex'

  # 内部函数

  def inner()

    print(name)

  return inner

fn = outer()              # 访问外部函数,获取到内部函数的地址

fn()         # 访问内部函数

 

4、总结

  闭包:在内层函数中引入外层函数的变量

  作用:

    1、保护变量不收侵害

    2、让一个变量常驻内存

三、迭代器

   dir() 查看变量能够执行的方法(函数)

   Iterator : 迭代器,   __iter__(), __next__()

   Iterable:可迭代的  __iter__()

   for循环的流程:

   it = lst.__iter__()

   while 1:

     try:

       el = it.__next__()

             for循环的循环体

      except StopIteration:

         break

   # 从迭代器中获取数据的唯一方法: __next__()

   三个特征:

    1、省内存

    2、惰性机制

    3、只能往前。不能退后

#  如何判断一个数据是否是可迭代对象#  1. dir() ->  __iter__  可迭代的#     dir() -> __next__  迭代器# lst = ["秦始皇", "汉武帝", "孝文帝", "隋炀帝", "李世民"]# print("__iter__" in dir(lst)) # True 可迭代的# print("__next__" in dir(lst)) # False 不是迭代器## print("__iter__" in  dir(int))# print("__next__" in  dir(int))## it = lst.__iter__() # 迭代器# print("__iter__" in dir(it)) # True  迭代器本身就是可迭代的# print("__next__" in dir(it)) # Truelst = ["秦始皇", "汉武帝", "孝文帝", "隋炀帝", "李世民"]

# collections 关于集合类的相关操作# Iterable : 可迭代的# Iterator : 迭代器
from collections import Iterable, Iteratorprint(isinstance(lst, Iterable)) # Trueprint(isinstance(lst, Iterator)) # False

print(isinstance({1,2,3}, Iterable)) # True, 可以使用for循环

转载于:https://www.cnblogs.com/alvin-jie/p/9885182.html

python之路-day11-迭代器闭包相关推荐

  1. 初学python之路-day11

    一.函数的参数:实参与形参 # 参数介绍: # 函数为什么要有参数:因为内部的函数体需要外部的数据 # 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 # 怎么使用函数的参数:在 ...

  2. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...

  3. Python之路【第二篇】:Python基础(一)

    Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name ...

  4. 运维小白的python之路(一)

    运维小白的python之路(一) 本人运维小白一枚,目前在负责某银行的测试服务器的基础运维.浑浑噩噩的过了一年,工作上也涉及不到什么技术.身边的朋友们都在各自的领域内奋斗发展,感觉自己不能这样下去了, ...

  5. python之路——模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...

  6. Python之路【第五篇】:面向对象及相关

    Python之路[第五篇]:面向对象及相关 Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance ...

  7. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  8. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  9. 《我的Python之路V1.3.pdf》可以下载了,这版pdf更精美!

    1 前言 Python之路V1.3.pdf,使用更加专业的latex脚本和专业的Tex Live编译器生成,在经过这周3,4天的学习,编写,制作,终于完成年前制定的计划. 在制作V1.3.pdf中,遇 ...

  10. Python之路【第十四篇】:AngularJS --暂无内容-待更新

    Python之路[第十四篇]:AngularJS --暂无内容-待更新 转载于:https://www.cnblogs.com/weiman3389/p/6224181.html

最新文章

  1. BoW图像检索Python实战
  2. ebp 函数堆栈esp_对于ESP、EBP寄存器的理解
  3. 区块链与边缘计算(2)功能介绍
  4. python matplotlib.figure.Figure.add_subplot()方法的使用
  5. KFold、StratifiedKFold、GroupKFold的区别
  6. Visual Studio Code 1.3终于增加了标签页
  7. js 返回上一页和刷新以及页面跳转
  8. 微课|中学生可以这样学Python(例6.4):因数分解
  9. java digests.generatesalt_Java DigestUtils.sha1Hex方法代碼示例
  10. python vba sql_Excel、VBA与Mysql交互
  11. 最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)
  12. 2022最新微信小程序游戏:一起来找茬
  13. 根据内核Oops 定位代码工具使用— addr2line 、gdb、objdump
  14. overleaf表格_Overleaf——LaTeX制表命令使用教程
  15. ASEMI代理TW6869-TA1-CRH瑞萨TW6869-TA1-CRH车规级
  16. 边缘发光材质unity_Unity Shader Graph 小功能实现(一)边缘发光
  17. ElasticSearch 2 (36) - 信息聚合系列之显著项
  18. OCR识别:纸币(人民币)号码识别
  19. python自动控制生产线输送线_(完整版)(完整版)自动流水线输送系统设计说明书...
  20. Android.mk文件添加调试打印信息

热门文章

  1. centos使用yum快速安装java的方法
  2. MySQL中对varchar类型排序问题的解决
  3. 先验概率,后验概率,条件概率,贝叶斯
  4. LeetCode简单题之生成每种字符都是奇数个的字符串
  5. TVM量化路线图roadmap
  6. YOLO v1到YOLO v4(下)
  7. 深度学习11个实用技巧
  8. 如何挑选深度学习 GPU?
  9. Android线程池简单使用
  10. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置