python摸爬滚打之day11----函数闭包,迭代器
1、函数名
函数名就是一个变量名, 函数名存储的是该函数的内存地址.
函数名都可以进行哪些应用?
函数名可以赋值给其他的变量;
函数名可以作容器里的元素使用;
函数名可以当做形参传进另一函数;
函数名可以作为函数的返回值, 即 return func, 在全局调用.
代理模式?
给某一函数在执行前后执行后加上某些功能, 是装饰器的雏形.
def chi(f):
print("吃汉堡")
f()
print("吃炸鸡")
def he():
print("喝肥宅快乐水") chi(he)
代理模式
2、闭包
内层函数对外层函数的变量的引用.
作用: 1, 保护变量不受更改; 2, 让变量常驻于内存不会被销毁.
# 闭包
def outer():
a = 100
def inner(): # inner()函数要用到父级的a, 所以inner()函数就是一个闭包.
b = a + 50
return b
return inner # 函数名作为函数的返回值,在全局调用 ret = outer()
ret() # 在外部调用里层的函数
闭包
3、迭代器
(前情:)内置函数---- dir(查询的对象) : 可以查出该对象可以执行的操作(即内部可执行方法)
可以用dir(list)查询是否有__iter__() 或__next__() 方法.
可迭代对象: 可循环遍历的对象, 即str, list, dic, tuple, set. 内部只有__iter__()方法.
迭代器: 内部既有__iter__() 方法,也有__next__() 方法.
for 循环遍历机理?
lst = ["李白","李黑","李太白","李太黑","李不白",] # 可迭代对象
it = lst.__iter__() # 先变成迭代器
while 1:
try:
content = it.__next__() # 迭代器通过__next__()来取值
print(content)
except StopIteration: # 取完了就直接添加错误,然后停止
print("遍历完了可以结束了")
break
for循环遍历机理
判断一个对象(str)是否是一个可迭代对象?
1: 通过dir(str) 看有没有__iter__();
2: print("__iter__" in dir(str) ) ----> True : 是可迭代对象;
3: from collections import Iterable, Iterator
print( isinstance(str, Iterable) ) ----> True : 是可迭代对象
迭代器的三个特点?
1: 节省内存(用生成器);
2: 惰性机制, 必须使用__next__()来获取数据;
3: 只能向后执行, 不能再返回前一级.
python摸爬滚打之day11----函数闭包,迭代器的更多相关文章
- python基础学习Day11 函数名的应用、闭包、迭代器
一.函数名的应用 1.函数名就是函数的内存地址 def func(): print(666) func() print(func) #函数的内存地址 2.函数名可以作为变量 def func1(): ...
- python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)
一.函数名应用 函数名是什么?函数名是函数的名字,本质:变量,特殊的变量. 函数名(),执行此函数. python 规范写法 1. #后面加一个空格,再写内容,就没有波浪线了. 2.一行代码写完,下面 ...
- 12.Python略有小成(生成器,推导式,内置函数,闭包)
Python(生成器,推导式,内置函数,闭包) 一.生成器初始 生成器的本质就是迭代器,python社区中认为生成器与迭代器是一种 生成器与迭代器的唯一区别,生成器是我们自己用python代码构建成的 ...
- Python函数05/内置函数/闭包
Python函数05/内置函数/闭包 目录 Python函数05/内置函数/闭包 内容大纲 1.内置函数(二) 2.匿名函数及内置函数(重要) 3.闭包 4.今日总结 5.今日练习 内容大纲 1.内置 ...
- python 内嵌函数, 闭包, 函数装饰器
一. 函数内嵌 闭包 在python中,函数可以作为返回值, 可以给变量赋值. 在python中, 内置函数必须被显示的调用, 否则不会执行. #!/usr/bin/env python #-*- ...
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- day11 第一类对象 闭包 迭代器
今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象 : 函数对象介意向变 ...
- Python函数系列-迭代器,生成器
一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...
- Python函数-闭包的概念
一个函数和它的环境变量合在一起,就构成了一个闭包(closure).在Python中,所谓的闭包是一个包含有环境变量取值的函数对象.环境变量取值被保存在函数对象的__closure__属性中.比如下面 ...
随机推荐
- EF5+MVC4系列(12) 在主视图中直接用RenderAction调用子Action,并返回视图(Return View)或者分部视图(Return PartialView); 从主Action传值到子Action使用TempData传值;TempData高级用法
结论: ViewData 适用于 在一次请求中 传递数据 . 比如我们从 主Action 到 主视图, 然后在 主视图中 用 RenderAction 请求子Action的时候,就是算作 一次请求 ...
- IDEA VS 常用高效 黄金 快捷键
[参考] VS 常用高效 快捷键 身为一个编程人员,掌握IDE的快键是提高开发效率最简单直接的方法,也是必备技能.和网上的大篇罗列不同,下面只讲精髓,根据实践不断调整.本人C#转Java,曾经试过Ec ...
- js实现滑动的弹性导航
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 用NextResult方法取得多个Result Set
http://dotnet.chinaitlab.com/ADONET/757364.html 从 ADO.NET 1.x 开始,DataReader 就可以在单一次的查询动作中,「批次 (batch ...
- iOS - UIView属性hidden, opaque, alpha, opacity的区别
iOS开发-之UIView属性hidden, opaque, alpha, opacity的区别 一.alpha 液晶显示器是由一个个的像素点组成的,每个像素点都可以显示一个由RGBA颜色空间组成的一 ...
- 一个表中的id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数
一个表中的id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数 select id ,Count(*) from table_name group by id having count( ...
- Android摸索-二、解决Android SDK Manager下载太慢问题
下载Android SDK Manger 那个速度………… 有了这个再也不用担心了 1.打开android sdk manager 2.打开tool->options 按图片中输入参数:mi ...
- 在Ubuntu上安装Chrome Driver和Firefox Driver
在Ubuntu上安装Chrome Driver和Firefox Driver 此文章只介绍Chrome Driver(Firefox Driver和该步骤相同) 下载链接:http://chromed ...
- 非节点主机通过内网远程管理docker swarm集群
这是今天使用 docker swarm 遇到的一个问题,终于在睡觉前解决了,在这篇随笔中记录一下. 在 docker swarm 集群的 manager 节点上用 docker cli 命令可以正常管 ...
- redis集群,主从,持久化
1,单机版 先安装gcc yum install gcc-c++ 然后解压源码包,执行编译命令make(C语言写的,需要gcc环境),最后安装Redis,需要通过PREFIX指定安装路径make ...