一.函数名的运用
函数名就是一个变量名,但它是一个特殊的变量名,是一个后面加括号可以执行函数的变量名.
1 def func(): 2 print("我是一个小小的函数") 3 a = func 4 print(a) 5 6 func() 7 a() 8 9 func = 3 10 print(func)
函数名的命名规范与变量的命名规范一样.
函数名可以作为列表中的元素进行存储.
可以作为参数传给函数
def my(): print("我是my") def proxy(fn): # 代理模式. 装饰器 print("在处理之前") fn() print("在处理之后") proxy(my) # 把函数名作为参数传递给另一个函数
可以作为函数的返回值
1 def func(): 2 print("我是func") 3 a = 10 # 变量 4 def inner(): 5 print("我是inner") 6 return inner 7 # ret = func() 8 # ret() 9 func()() # 先运行func() 然后在返回值上加()
二.闭包
在内层函数中访问外层函数的局部变量
好处:1.可以保护的变量不受外界影响
2.可以让变量常驻内存
语法:
1 def func1(): 2 a =1 3 def func() 4 print(a) 5 return func()
三.迭代器
使用dir来查看该数据包含了那些方法
用来便利列表,字符串,元组....可迭代对象
可迭代对象: Iterable,里面有__iter__()可以获取迭代七,没有__next__()
迭代器: Iterator,里面有__iter__()可以获取迭代器,还有__next__()
1 s = 123 2 for i in s: 3 print(i) 4 print(dir(str)) # dir查看xx类型的数据可以执行哪些方法, __iter__ iterable 5 print(dir(list)) # __iter__ 6 print(dir(int)) # 没有__iter__ 7 # 所有的带__iter__可以使用for循环的, 可迭代对象 8 9 # 可迭代对象可以使用__iter__()来获取到迭代器 10 # 迭代器里面有__next__() 11 s = "石可心喜欢赵一宁" 12 it = s.__iter__() # 获取迭代器 13 print(dir(it)) # 迭代器里有__iter__ 还有__next__ 14 15 print(it.__next__()) # 石 16 print(it.__next__()) # 可 17 print(it.__next__())# 心 18 print(it.__next__())# 喜 19 print(it.__next__())#欢 20 print(it.__next__())#赵 21 print(it.__next__())# 一 22 print(it.__next__())# 宁
迭代器的特点:
1.只能向前
2.惰性机制
3.省内存(生成器)
for循环的内部机制
1. 首先获取到迭代器
2.使用while循环获取数据
3.it.__next__()来获取数据
4.处理异常 try: xxx except StopIteration:
1 it = xx.__iter__() 2 while 1: 3 try: 4 data = it.__next__() 5 xxxxx 6 except StopIteration: 7 break