迭代器,生成器及內置函數補充

內置函數補充

print(vars().keys())
print(vars())    #返回對象的變量,若無參數與dict()方法類似

_name_
name用來規定這個文件的用處,如果是主文件(可執行文件),name == “main” 否則,name 等於模塊名

_file_ .py文件的路徑

print(os.path.dirname(os.path.dirname(__file__)))    #顯示當前目錄的上一級目錄
sys.path()    #執行路徑
os.path.dirname    #查看當前目錄的上一層
os.path.join    #拼接

例子:把當前目錄的執行路徑添加到sys.path()

import os
import sys
a1 = os.path.dirname(__file__)
a2 = "bin"
c1 = os.path.join(a1, a2)
sys.path.append(c1)
print(sys.path)

_builtins_
內置函數在此

__doc__     #.py文件的註釋
__package__    #指定.py文件所在的文件夾,本文件不顯示
__cached__    #緩存,導入模塊時,模塊文件會產生.pyc文件(略懂)

生成器

一個函數調用時返回一個迭代器,那這個函數就叫做生成器(generator);如果函數中包含yield語法,那這個函數就會變成生成器

def func():
    yield 1
    yield 2
    yield 3
    yield 4

上述代碼中:func是函數稱爲生成器,當執行此函數func()時會得到一個迭代器。

>>> temp = func()
>>> temp.__next__()
1
>>> temp.__next__()
2
>>> temp.__next__()
3
>>> temp.__next__()
4
>>> temp.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

例子:
利用生成器自定義range

def nrange(num):
    temp = -1
    while True:
        temp = temp + 1
        if temp >= num:
            return
        else:
            yield temp

迭代器

迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因爲人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可以不存在或者被銷燬。這個特點使得它特別適合用於遍歷一些巨大的或是無限的集合,比如幾個G的文件

特點:

  • 訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容
  • 不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問
  • 訪問到一半時不能往回退
  • 便於循環比較大的數據集合,節省內存
a = iter([1,2,3,4,5])
a<list_iterator object at 0x101402630>
a.__next__()
1
a.__next__()
2
a.__next__()
3
a.__next__()
4
a.__next__()
5
a.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章