- 一:函数名的应用(第一类对象)
- 函数名的命名规范和变量是一样的,函数名其实就是变量名,
- 0)函数名可以赋值给其他变量
-
1 def func(): #定义一个名为func的函数 2 print('my angel') 3 a = func #将函数名func赋值给a 4 func() 5 a() #调用func()和a()
#结果为:
my angel
my angel
#所以函数名是可以赋值给其他变量的1 def func(): 2 print("my angel") 3 a = func 4 print(a) 5 func() 6 a() 7 print(func) #通过打印a和func,可以得出两个函数的内存地址完全一致
- 1)可以作为列表中的元素进行存储.
-
1 def func1(): #定义函数1 2 pass 3 def func2(): #定义函数2 4 pass 5 lst = [func1,func2] #将函数作为元素插入列表,注意:这里函数名不加小括号,加小括号是引用函数 6 for el in lst: 7 el()
- 2)可以作为参数传递给函数.
-
1 def func(): 2 pass 3 def proxy(fn): #这里的fn现在为函数func 4 fn() #结果为fn(func) 5 proxy(func) #将函数名func作为参数传递给函数proxy
- 3)可以作为函数的返回值
-
1 def fanc(): 2 def inner(): #3,执行inner函数 3 pass 4 return inner #2,fanc函数的返回值是inner 5 func()() #1,调用func函数
- 二:闭包
- 什么是闭包:在内层函数中访问外层函数的局部变量.
-
1 def func(): 2 name = '第一次-光良' 3 def func2(): 4 print(name) #3,函数func2中没有name这个变量,会从外层找这个变量,这就是闭包. 5 func2() #2,调用func2函数 6 func() #1,调用func函数 7 8 #结果为'第一次-光良'
-
- 相关操作:
- 可以使用函数名.__closure来检测函数是否是闭包,如果返回None就不是闭包,
- 好处:
- 1)保护你的变量不受外界影响
- 2)可以让变量常驻内存,供后面的程序使用.
- 相关操作:
- 三:迭代器
- 迭代器用来遍历列表,字符串,元组......可迭代对象
- 相关操作:
- 使用dir来查看该数据包含了哪些方法
- 可迭代对象:Iterable,里面有__iter__( )可以获取迭代器,没有__next__( )
- 迭代器:Iterator,里面有__iter__( )可以获取迭代器,还有__next__( )
- 迭代器的特点:
- 1)只能向前
- 2)惰性机制(给一条指令,执行一次)
- 3)省内存(生成器)
- for循环的内部机制:
- 1)首先获取到迭代器
- 2)使用while循环获取数据
- 3)it.__next__( )来获取数据
- 处理异常 try:xxx except Stoplteration: