python之路-day11-迭代器闭包
一 、 函数名的运用
函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量。
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-迭代器闭包相关推荐
- 初学python之路-day11
一.函数的参数:实参与形参 # 参数介绍: # 函数为什么要有参数:因为内部的函数体需要外部的数据 # 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 # 怎么使用函数的参数:在 ...
- python 之路,Day11 (下)- sqlalchemy ORM
python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...
- Python之路【第二篇】:Python基础(一)
Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1: name ...
- 运维小白的python之路(一)
运维小白的python之路(一) 本人运维小白一枚,目前在负责某银行的测试服务器的基础运维.浑浑噩噩的过了一年,工作上也涉及不到什么技术.身边的朋友们都在各自的领域内奋斗发展,感觉自己不能这样下去了, ...
- python之路——模块和包
一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...
- Python之路【第五篇】:面向对象及相关
Python之路[第五篇]:面向对象及相关 Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance ...
- 完全理解 Python 迭代对象、迭代器、生成器(转)
完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- 《我的Python之路V1.3.pdf》可以下载了,这版pdf更精美!
1 前言 Python之路V1.3.pdf,使用更加专业的latex脚本和专业的Tex Live编译器生成,在经过这周3,4天的学习,编写,制作,终于完成年前制定的计划. 在制作V1.3.pdf中,遇 ...
- Python之路【第十四篇】:AngularJS --暂无内容-待更新
Python之路[第十四篇]:AngularJS --暂无内容-待更新 转载于:https://www.cnblogs.com/weiman3389/p/6224181.html
最新文章
- BoW图像检索Python实战
- ebp 函数堆栈esp_对于ESP、EBP寄存器的理解
- 区块链与边缘计算(2)功能介绍
- python matplotlib.figure.Figure.add_subplot()方法的使用
- KFold、StratifiedKFold、GroupKFold的区别
- Visual Studio Code 1.3终于增加了标签页
- js 返回上一页和刷新以及页面跳转
- 微课|中学生可以这样学Python(例6.4):因数分解
- java digests.generatesalt_Java DigestUtils.sha1Hex方法代碼示例
- python vba sql_Excel、VBA与Mysql交互
- 最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)
- 2022最新微信小程序游戏:一起来找茬
- 根据内核Oops 定位代码工具使用— addr2line 、gdb、objdump
- overleaf表格_Overleaf——LaTeX制表命令使用教程
- ASEMI代理TW6869-TA1-CRH瑞萨TW6869-TA1-CRH车规级
- 边缘发光材质unity_Unity Shader Graph 小功能实现(一)边缘发光
- ElasticSearch 2 (36) - 信息聚合系列之显著项
- OCR识别:纸币(人民币)号码识别
- python自动控制生产线输送线_(完整版)(完整版)自动流水线输送系统设计说明书...
- Android.mk文件添加调试打印信息
热门文章
- centos使用yum快速安装java的方法
- MySQL中对varchar类型排序问题的解决
- 先验概率,后验概率,条件概率,贝叶斯
- LeetCode简单题之生成每种字符都是奇数个的字符串
- TVM量化路线图roadmap
- YOLO v1到YOLO v4(下)
- 深度学习11个实用技巧
- 如何挑选深度学习 GPU?
- Android线程池简单使用
- 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置