一.函数名的运用

1.函数名的内存地址

 def func():
print("英雄联盟")
print(func)
#输出结果:
<function func at 0x00000299E4C62E18>
#证明这个函数名func就是一块内存地址

若func直接赋值给a,则a也指向这块内存地址,所以a()进行了函数调用,执行a()结果为"英雄联盟"

2.函数名当做容器类的元素

def func1():
print("吃")
def func2():
print("喝")
def func3():
print("拉")
lst = [func1,func2,func3]
for i in lst:
i()
#输出结果:
吃 喝 拉

a:当列表中的元素func1改为func1()时,会牵扯到返回值的问题

 def func1():
print("吃")
def func2():
print("喝")
def func3():
print("拉")
lst = [func1(),func2(),func3()]
print(lst)
#输出结果
吃 喝 拉
[None, None, None] #看这里
每一个函数都会被执行,但是返回值都为空;

b:函数可以作为参数,传递给另一个函数:

 def func(fn):
fn()
def gn():
print("穿靴子的猫")
func(gn)
#输出结果
穿靴子的猫

c:函数也可以作为返回值被执行;所以综上函数就是一个变量;

3.闭包

a:闭包的概念:内层函数,对外层函数(非全局)的变量的引用,叫闭包;

代码展示:

 def func():
name = "alex"
print(1111)
def gn():
print(name)
return gn
ret = func()
ret()   #这里是直接调用了gn函数,因为输出结果表示没有执行print(111)
ret()   #所以直接调用gn的时候,如果外部函数的变量name被清除,那将会报错
ret()   #所有外层函数name会常驻内存;
#输出结果
1111
alex
alex
alex

#爬虫的一个小程序

 from urllib.request import urlopen
def but():
content = urlopen("http://www.xiaohua100.cn/index.html").read()
def get_contend():
return content
print(get_contend.__closure__) #这句话是判断该函数是不是闭包
return get_contend
fn = but()
content = fn()
print(content) content2 = fn()
print(content2)
#如果输出None,则表示它不是闭包,
若是,则输出一串地址:(<cell at 0x0000025ED7A88678: bytes object at 0x0000025ED7E95330>,)

二.迭代器

1.可迭代对象:list,str,tuple,set,f,dict,这几个对象当中,都有一个函数__iter__()

a:可以用dir方法查看数据类型包含了哪些东西;格式:print(dir(数据类型))

 print("__iter__" in dir(list))
print("__iter__" in dir(tuple))
print("__iter__" in dir(str))
print("__iter__" in dir(dict))
print("__iter__" in dir(set))
print("__iter__" in dir(int)) #不可迭代对象
#输出结果:
True
True
True
True
True
False

b:迭代器和可迭代对象的区别

 l = [1,2,3]
it = l.__iter__() #it为迭代器
from collections import Iterable #导入模块
from collections import Iterator
print(isinstance(l,Iterator)) #判断是否是迭代器
print(isinstance(l,Iterable)) #判断是否是可迭代对象
print(isinstance(it,Iterator))
print(isinstance(it,Iterable))
#输出结果
False
True
True
True

迭代器,内部包含了一个函数__next__(),相当于一个班的班长,负责让学生一个一个的出来;

它有个惰性机制,就是你开始让学生出去了,班长才开始一个一个的喊,你没喊开始,学生就一直在

班级里面,虽然程序已经写出来了,但是就是放在那,等你喊开始;

b:for循环的一个模拟:内部是如何执行的

 ls = [1,2,3]
it = ls.__iter__()
while 1:
try:
count = it.__next__() #如果你没有下面的输出语句,这一句话是不会被执行的,惰性机制
print(count)
except StopIteration:
break
#输出结果;1,2,3

1)先利用可迭代对象得到迭代器,  2)然后再利用.__next__()执行可迭代对象,把值赋给变量;

c:迭代器的特点;节省内存,惰性机制,不能反复,只能向下执行;

#迭代器和while循环的最大区别就是惰性机制;

Python_010(迭代器)的更多相关文章

  1. 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密

    0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...

  2. 轻量级“集合”迭代器-Generator

    Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...

  3. C#设计模式-迭代器模式

    一. 迭代器(Iterator)模式 迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的 ...

  4. 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)

    上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...

  5. Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

    本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...

  6. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  7. Java迭代器

    迭代器在其实就是指针,读取集合或者数组中的一个值,读完以后又指向下一条数据. iterator() 迭代器只读,不能改效率要比for循环高 迭代器的一些方法: HasNext() 如果仍有元素可以迭代 ...

  8. Python 生成器与迭代器 yield 案例分析

    前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...

  9. 设计模式02迭代器(java)

    先贴代码,有空来写内容. 1.定义集合 import java.util.List; import java.util.ArrayList; //coollection是我自己定义的一个集合,因为要写 ...

随机推荐

  1. Openstack 通过 SQLAlchemy-ORM 访问数据库

    目录 目录 Demo SQLAlchemy 数据库的初始化 数据库的操作实现 数据库的操作请求 全部查询 单个查询 创建 更新 删除 Demo Github/JmilkFan/my-code-repe ...

  2. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第5节 String类_5_字符串的获取相关方法

    original:原来的.开始的 如果有多次的情况 因为查找的是第一次的出现的位置的索引值 如果要查找的字符串压根没有的话返回的就是-1

  3. 《上瘾 - 让用户养成使用习惯的四大产品逻辑》 - Nir Eyal, Ryan Hoover

    <上瘾 - 让用户养成使用习惯的四大产品逻辑> - Nir Eyal, Ryan Hoover 前言 1.所谓的消费升级,就是个人愿意付出更高的成本购买与自我价值相匹配的产品.购买即是一种 ...

  4. Matlab入门基础

    matlab入门篇,一些基础用法记一下~ M语言是解释型语言 ​ who:查看当前变量 ​ whoes:查看当前变量及其维数.所占字节数等. ​ clear: 清除所有变量 ​ clear + 变量名 ...

  5. mooc-IDEA 列操作--005

    十一.IntelliJ IDEA -列操作 实例:根据HTTP请求JSON文件,生成一个枚举类 Step1:创建一个枚举类,把要转换的JSON串粘贴进来. 最终要实现效果 Step2:选中第一个100 ...

  6. python2.7打印中文乱码的问题解决

    一. import sys reload(sys) sys.setdefaultencoding('utf-8') print('测试中文') 二. print(‘我是中国人’) >>&g ...

  7. xshell输入字母空格间距变大

    按一下shift+空格(全角/半角转换的快捷键,引起的问题)

  8. 如何通过脚本实现显示版本号、CPU、硬盘和内存条大小

    COLOR="\033[1;$[RANDOM%7+31]m"     COLOR1="\033[1;$[RANDOM%7+31]m"COLOR2="\ ...

  9. jJava第一周学习总结

    对于本学期要学习的Java程序语言,经过一周多的学习,我们首先在第一堂课了解了Java平台以及Java的历史,接着认识了JDK,初步了解了JDK的安装,JDK运行环境的设置,包括其中路径path的设置 ...

  10. sql中的sp_helptext、sp_help 、sp_depends

    sp_help:用于显示参数清单和其数据类型. sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象. sp_helptext:用于显示存储过程的定义文本