python之路-day11-迭代器闭包
?
一 、 函數名的運用
函數名是一個變量,但它是一個特殊的變量,與括號配合可以執行函數的變量。
1、函數名的內存地址
def func():
print("呵呵")
print(func)
結果:
<function func at 0x1101e4ea0>
2、函數名可以賦值給其他變量
def func():
print("呵呵")
print(func)
a = func # 把函數當成一個變量賦值給另一個變量
a() # 函數調用 func()
3、函數名可以當做容器類的元素
def func1():
print("呵呵")
def func2():
print("呵呵")
def func3():
print("呵呵")
def func4():
print("呵呵")
lst = [func1, func2, func3]
for i in lst:
i()
?
4、函數名可以當做函數的參數
5、函數名可以作為函數的返回值
? ? ? ?
?
二、閉包
1、 什么是閉包?閉包就是內層函數,對外層函數(非全局)的變量的引用。叫閉包
def func1():
name = "alex"
def func2():
print(name) # 閉包
func2()
func1()
結果:
alex
2、我們可以使用__closure__來檢測函數是否是閉包.使用函數名.__closure__
返回cell就是閉包。返回None就不是閉包
def func1():
name = 'alex'
def func2():
print(name)
func2()
print(func2.__closure__)
func1()
結果:(<cell at 0x00000248D5C77618: str object at 0x00000248D5D07068>,)
?3、如何在函數外邊調用內部函數
def outer():
name = 'alex'
# 內部函數
def inner()
print(name)
return inner
fn = outer()? ? ? ? ? ?? # 訪問外部函數,獲取到內部函數的地址
fn() # 訪問內部函數
?
4、總結
閉包:在內層函數中引入外層函數的變量
作用:
1、保護變量不收侵害
2、讓一個變量常駐內存
?
三、迭代器
dir() 查看變量能夠執行的方法(函數)
Iterator : 迭代器,? __iter__(), __next__()
Iterable:可迭代的 __iter__()
for循環的流程:
it = lst.__iter__()
while 1:
try:
el = it.__next__()
? ? ? ? ?for循環的循環體
except StopIteration:
?? break
# 從迭代器中獲取數據的唯一方法: __next__()
三個特征:
1、省內存
2、惰性機制
3、只能往前。不能退后
?
# 如何判斷一個數據是否是可迭代對象
# 1. dir() -> __iter__ 可迭代的
# dir() -> __next__ 迭代器
# lst = ["秦始皇", "漢武帝", "孝文帝", "隋煬帝", "李世民"]
# print("__iter__" in dir(lst)) # True 可迭代的
# print("__next__" in dir(lst)) # False 不是迭代器
#
# print("__iter__" in dir(int))
# print("__next__" in dir(int))
#
# it = lst.__iter__() # 迭代器
# print("__iter__" in dir(it)) # True 迭代器本身就是可迭代的
# print("__next__" in dir(it)) # True
lst = ["秦始皇", "漢武帝", "孝文帝", "隋煬帝", "李世民"]
# collections 關于集合類的相關操作
# Iterable : 可迭代的
# Iterator : 迭代器
from collections import Iterable, Iterator
print(isinstance(lst, Iterable)) # True
print(isinstance(lst, Iterator)) # False
print(isinstance({1,2,3}, Iterable)) # True, 可以使用for循環
轉載于:https://www.cnblogs.com/alvin-jie/p/9885182.html
總結
以上是生活随笔為你收集整理的python之路-day11-迭代器闭包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “渴不饮盗泉”上一句是什么
- 下一篇: 使用 vue filters过滤器直接显