函数名的使用以及第一类对象,闭包,迭代器
2018-08-10 11:27:33来源:博客园 阅读 ()
一丶函数的名的应用(第一类对象)
函数名的命名规范和变量是一样的
1.可以做列表中的元素进行存储
def func1(): pass def func2(): pass lst = [func1, func2] for el in lst: el()
2.可以作为参数传递给函数.
def func(): pass def proxy(fn): fn() proxy(func)
3.可以作为函数的返回值
def func(): def inner(): pass return inner func()()
4.函数名的内存地址
def func(): print("呵呵") print(func) 结果为: <function func at 0x0000022951B03E18>
二丶闭包
闭包:在内层函数中访问外层函数的局部变量
好处:
1.保护变量不受外界影响
2.可以让变量常驻内存
写法:
def outer(): a = 10 def inner(): print(a) return inner
如何判断是不是闭包,可以用__closure__来检测函数是否是闭包,使用函数名__closure__返回cell就是闭包,返回None就不是闭包
def func1(): name = "alex" def func2(): print(name) func2() print(func2.__closure__) #(<cell at 0x0000023BA6A6B498: str object at 0x0000023BA6AFA7A0>,) func1()
三丶迭代器
用来遍历列表,字符串,元组........可迭代对象
#对的 s = "abc" for c in s: print(c) #错的 for i in 123: print(i)
注意看报错信息中有这样一句话:'int' object is not iterable,翻译过来就是整数类型对象是不可迭代的,iterable表示可迭代的,表示可迭代协议,那么如何进行验证你的数据类型是否符合可迭代协议,我们可以通过dir函数来查看类中定义好的所有方法.
s = "我的哈哈哈" print(dir(s)) #可以打印对象中的方法和函数 print(dir(str)) #也可以打印类中声明的方法和函数
在打印结果中,寻找 __iter__如果能找到,那么这个类的对象就是一个可迭代对象.
可迭代对象:Iterable,里面有__iter__()可以获取迭代器,没有__next__()
迭代器: Iterator,里面有__iter__()可以获取迭代器.,还有__next__()
迭代器特点:
1.只能向前
2.惰性机制
3.省内存(生成器)
for循环的内部机制.
1.首先获取到迭代器
2.使用while循环获取数据
3.it.__next__()来获取数据
4.处理异常 try:XXXX except StopIteration:
it = xx.__iter__() while 1: try: data = it.__next__() xxxx except StopIteration: break
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- fetchone函数和fetchall函数返回值的区别 2019-08-13
- Python之装饰器笔记 2019-08-13
- Python学习日记(九) 装饰器函数 2019-08-13
- python之函数、面向对象 2019-08-13
- python3基础之“函数(2)” 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash