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