博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数--第一类对象、闭包、
阅读量:4657 次
发布时间:2019-06-09

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

一.第一类对象

函数名是一个变量,但它是个特殊的变量,与括号配合可以执行函数的变量.函数名可以赋值给其他变量,调用函数体时,后面()就可和原函数名一样使用函数名可以当作容器类的元素函数名可以当作函数的参数函数名可以作为函数的返回值

二.闭包

闭包就是内层函数,对外层函数(非全局)的变量的引用,python规定:如果你的内部函数中访问了外层函数中的变量,那么这个变量将不会消亡,常驻内存闭包的简单写法:def func1():    name = "alex"    def func2():        return name    # 闭包    return func2ret=func1() #访问外部函数,获取到内部函数的地址print(ret())#访问并打印内部函数结果:alex

未来闭包的应用场景简述

简易版爬虫
from urllib.request import urlopen  #导入urllib包的request模块的urlopen(打开一个网址)函数 def but():     content = urlopen("https://www.dytt8.net").read()     def get_content():           return content     return get_content print("开始获取") fn = but() content = fn().decode("gbk") print("获取完毕") print(content[60]) print(content[5])
检测函数是否有闭包:__closure__使用函数名.__closure__返回cell就是闭包,返回None就不是闭包 闭包的优点:     1)保护变量不被全局修改     2)可以让这个变量常驻内存,方便调用. 闭包的不足:     当闭包太多,常驻内存的值就会很多,内存空间会告急.

 

三、迭代器

 判断迭代器和可迭代对象的方案(官方):

Iterable(是否是可迭代的);

Iterator(是否是迭代器)

from collections import Iterable, Iteratorisinstance(对象, Iterable) 是否是可迭代的isinstance(对象, Iterator) 是否是迭代器

 

str, list, tuple, dict, set都是可迭代对象,因为他们遵循了可迭代协议.dir()函数是第一种:可以查看类中定义好的所有方法,包括是否可迭代print(dir(str))属性中存在__iter__,声明该类是个可迭代对象,isinstence()函数是第二种查看一个对象定义好的所有方法,包括是否可迭代l = [1,2,3]l_it = l.__iter__() #获取对象的迭代器,有了迭代器权限,才能一个一个(__next__)迭代拿取__inter__获取到对象的迭代器  #可以使用迭代器中的__next__()来一个一个的获取迭代器内的元素, 总结:   以后代码写的过长,但需求只是一部分时,使用改方法可节省内存. 该方法存在惰性机制,就是你不下__next__的指令它就永远停在那里,而且不能反复,只能向下执行,如果想再次获取前一个内容,必须重新获取该类的迭代器(l_it = l.__iter__)

 for 循环的机制:

for i in [1,2,3]:    print(i)

 

 下面我们使用while循环+迭代器来模拟for循环

lst = [1,2,3]lst_iter = lst.__iter__()#获取lst列表的迭代器权限while True:    try: #尝试        i = lst__iter__().__next__()        print(i)    except StopIteration:#如果报错        break  #终止(兜底)此方法的try,except StopIteration, break,为固定格式

转载于:https://www.cnblogs.com/lgw1171435560/p/10099681.html

你可能感兴趣的文章
【转】java中float与byte[]的互转 -- 不错
查看>>
sockaddr和sockaddr_in的区别
查看>>
基础练习1
查看>>
左旋转字符串
查看>>
第二次C语言实验报告
查看>>
XPath轴
查看>>
Struts2的优点与Struts1的区别:
查看>>
5-29 删除字符串中的子串
查看>>
webdriver模拟鼠标操作
查看>>
Spring cloud 基础
查看>>
游戏开发Unity渲染场景光照性能优化 ShaderLOD
查看>>
java中构造方法的使用
查看>>
使用Expression动态创建lambda表达式
查看>>
MapReduce
查看>>
找工作——JVM内存管理
查看>>
【Flask】在Flask中使用logger
查看>>
好系统重装助手教你如何让win10系统快速开机
查看>>
linux开机启动
查看>>
BZOJ 1101 [POI2007]Zap 【莫比乌斯反演】
查看>>
SQL Server-The target principal name is incorrect. Cannot generate SSPI context
查看>>