主要内容:
1、函数名的使用
2、闭包
3、迭代器
一、函数名的运用
函数名是一个变量,但他是一个特殊的变量,与括号配合可执行函数的变量。
1、函数名的内存地址
def func(): print(‘呵呵‘) print(func) #结果 # <function func at 0x000000000215D7B8>
2、函数名可以赋值给其它变量
def func(): print(‘呵呵‘) print(func) a = func a()
3、函数名可以当做容器类的元素
def func1(): print("我是1") def func2(): print("我是2") def func3(): print("我是3") lst = [func1, func2, func3] for el in lst: el()
4、函数名可以当做函数的参数
def func(): print(‘吃了么‘) def func2(fn): print(‘我是func2‘) fn() print(‘我是func2‘) func2(func)
5、函数名可以作为函数的返回值
def func_1(): print(‘这里是函数1‘) def func_2(): print(‘这里是函数2‘) print(‘这里是函数1‘) return func_2 fn = func_1() fn()
二、闭包
闭包就是内层函数对外层函数(非全局)的变量的引用。可以使用__closure__来检测函数是否闭包,返回cell就是闭包,返回None就不是闭包。
def func1(): name = ‘alex‘ def func2(): print(name) func2() print(func2.__closure__) func1()
在函数外面调用内部函数:
如果是多层嵌套,需要一层一层的往外返回:
闭包的好处:
1、保护你的变量不受外部影响
2、可以让变量常驻内存
三、迭代器
查看一个对象是否可迭代方法:
野路子:
l = [1,2,3,4] it = l.__iter__() print(‘__iter__‘in dir(it)) print(‘__next__‘in dir(it))
官方方法:
使用while循环+迭代器来模拟for循环:
lst = [‘哈哈‘,‘嘻嘻‘,‘啦啦‘,‘吼吼‘] it = lst.__iter__() while 1: try: el = it.__next__() print(el) except StopIteration: break
总结:
Iterable:可迭代对象,内部包含__iter__()函数
Iterator:迭代器,内部包含__iter__()同时包含__next__()。
迭代器的特点:
1、节省内存
2、惰性机制
3、不能反复,只能向下执行
原文地址:https://www.cnblogs.com/fengchong/p/9457406.html
时间: 2024-08-07 19:22:05