博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基础11_函数名运用,闭包,迭代器
阅读量:6949 次
发布时间:2019-06-27

本文共 1282 字,大约阅读时间需要 4 分钟。

一. 函数名的运用

函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量
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).不能反复,只能向下执行

转载于:https://www.cnblogs.com/guyannanfei/p/10099044.html

你可能感兴趣的文章
管理磁盘和文件系统
查看>>
CSS解决高度自适应问题
查看>>
鼠标css样式:cursor
查看>>
ubuntu12.04——samba中的windows、linux用户名关系
查看>>
ruby on rails 多图上传
查看>>
MySQL 的 LIKE 查詢區分大小寫
查看>>
Unity HoloLens开发配置
查看>>
vim剪贴板小结
查看>>
Thinkpad ACCESS CONNECTIONS异常解决
查看>>
各行业对邮件服务器需求及解决方案
查看>>
linux软件管理与使用
查看>>
qt 使用样式设置渐变色背景
查看>>
ubuntu16.04 安装 操作 redis
查看>>
IIS启动网站出错的几个解决方法
查看>>
mysql对vachar排序的问题
查看>>
ASCII和Unicode编码
查看>>
什么事宏病毒,宏病毒的判断方法 ,宏病毒的防治和清除
查看>>
实战CGLib系列之proxy篇(五):接口生成器InterfaceMaker
查看>>
算法题!大家可以贡献答案哦!
查看>>
此文是2013年应届生实习时,集中培训班的最后,个人写给大家的话
查看>>