1. Применение имени функции.
Имя функции является переменным, но это специальным переменным, и может быть выполнено с помощью скобок переменной функции.
1. Адрес памяти из имени функции
DEF FUNC ():
Печать ( " О " )
Печать (FUNC)
# Результат: <функция FUNC в 0x1101e4ea0>
2. Имя функции может быть назначено на другие переменные
DEF FUNC ():
Печать ( " О " )
Печать (FUNC) = FUNC # функционировать в качестве переменной в другую переменную
A () # функции вызова FUNC ()
3. Имя элемента может быть использовано в качестве контейнеров
DEF func1 ():
Печать ( " О " )
DEF func2 ():
Печать ( " О " )
DEF FUNC3 ():
Печать ( " О " )
DEF Func4 ():
Печать ( " О " )
LST = [func1, func2 , FUNC3]
для I в LST:
я ()
4. Имя может быть использовано в качестве параметров функции
DEF FUNC ():
Печать ( " съесть " )
DEF func2 (ФН):
Print ( " Я func2 " )
Fn () # выполнить проход над Fn
Print ( " Я func2 " )
func2 (FUNC) # положить параметры , передаваемые в функцию в качестве параметра FUNC func2 Fn.
Имя может быть использовано в качестве возвращаемого значения функции
DEF func_1 ():
Печать ( " это функция 1. " )
DEF func_2 ():
Печать ( " это функция 2 " )
для печати ( "это функция 1 " )
возвращение func_2
Fn = func_1 () # выполняет функции 1. Функция 2 является функцией возврата, на этот раз точка находится выше Fn 2 функции
Fn () # выполнить указанную выше функцию возвращает
2. Закрытием
Что такое замыкание? Затворы являются ссылкой на внутреннюю функцию, переменная функция внешнего слоя (не глобальный). Вызываются затворы
def outer():
a = 10 # 很耗时
def inner():
print(a)
return inner
# outer()()
# outer()()
ret = outer()
ret()
ret()
注意:我们可以使用__closure__来检测函数是否是闭包. 使用函数名.__closure__返回cell就是闭包. 返回None就不是闭包
def func1(): name = "disman" def func2(): print(name) # 闭包 func2() print(func2.__closure__) # (<cell at 0x10c2e20a8: str object at 0x10c3fc650>,)
func1()
闭包好处:
1. 保护变量
2. 可以让一个变量常驻内存
3. 迭代器
__iter__() 可迭代对象. 获取迭代器
__next__() + __iter__() 迭代器
特点:
1. 惰性机制
2. 只能向前
3. 节省内存
for循环的内部就是迭代器
lst = [1,2,4]
it = lst.__iter__() # 获取迭代器
while 1:
try:
it.__next__() # 从迭代器中获取数据
except StopIteration:
break
Iterable: 可迭代的
Iterator: 迭代器