內置函數補充
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