11. @classmethod
類方法裝飾器調用的文法糖,它為被裝飾的函數提供最基本的靜态類方法。有關類方法的具體資訊,請參閱标準類型層次結構中關于标準類型層次結構的文檔。
12. compile(source,filename, mode, flags=0, dont_inherit=False, optimize=-1)
該函數将source編譯成代碼或者AST對象。編譯出的代碼可以被函數exec()或函數eval()執行。被編譯的source的具體存在形式可以是普通的字元串、位元組字元串,或者是AST對象。
filename參數提供source被讀取的目錄檔案名。如果source不是從檔案中讀取,那麼在此處filename參數通常為<string>。
mode參數用于指定編譯後代碼的表示格式。如果source由一系列的語句構成,那麼可以用exec()函數執行;如果source隻由表達式組成,呢麼可以用eval()函數執行;如果source由互動式聲明單獨構成,足可以用single()函數執行。
flags與don’t_inhert都是可選參數,它們決定哪些future_statement語句會影響source的編譯。如果不對兩者進行指派或者指派為0,代碼将與調用compile()函數中生效的future_statement語句同時生效。如果隻給出了flags參數(dont_inhert參數未給出或給出為0),那麼flags指定的future_statement語句也将生效。如果dont_inhert參數被給定了一個非零整型數字,flags就代表那麼圍繞compile()函數生效的future_statement語句。
optimize參數決定編譯的優化級别。預設值是-1(選擇有-o選項給出的解釋器優化級)。顯式級别為0代表沒有優化、__debug__的值為True;級别1代表斷言被移除、__debug__的值為False;級别2中文檔字元串也會被移除。
13. classcomplex([real[, imag]])
該類可以用來建構複數,它将傳回一個執行個體化的複數類(複數類也是一個基本的數字類型)。real代表實部,imag代表虛部(可以預設,預設時預設為0)。
該類支援類似如下調用法:
complex(‘1+2j’)但不支援其中包含空格,
若包含空格如complex(‘1 + 2j’)解釋器将會抛出ValueError錯誤。
14.delattr(object,name)
object參數應當是一個對象;name參數是一個字元串,該字元串為object對象所包含的某個屬性的名字。delattr()函數将在該對象允許删除該屬性時,删除該對象内被name參數指定的屬性。
例如:
delattr(x,'foobar') 等價于del x.foobar.
15. classdict(**kwarg)
classdict(mapping, **kwarg)
classdict(iterable, **kwarg)
該類執行個體化後創造一個新的字典,創造的字典屬于字典類。
16. dir([object])
若[object]為空,該函數将傳回本地作用域中的名稱清單;若[object]不為空,該函數将傳回object的有效屬性清單。
如果object有一個名叫__dir__()的方法(或函數),dir()函數必将傳回object的屬性清單。該原則允許那些可以自定義__getattr__()函數或__getattribute__()函數的對象,自主選擇向dir()函數報告其屬性的方式。
如果該object不提供__dir__()方法,該函數将盡力從object的__dict__()方法(假如這個方法存在)裡和其類型對象裡收集屬性資訊;但該函數最後收集到的清單内的資訊不一定完整,甚至在__getattr__()存在時會出現錯誤。
由于該函數緻力于收集最與object相關的資訊,而非最完整的資訊,該函數會對不同類型的對象産生不同的收集機制。
(1)如果object是子產品對象,清單将包含子產品的屬性名;
(2)如果object是一個類型或者類對象,清單将包含其屬性名,并包含其遞歸的屬性所基于的屬性;
(3)至于其他類型的object,清單将包含其屬性名,并且包含其遞歸的屬性所在類的基類。
例如:
>>> importstruct
>>> dir() # 顯示該子產品空間内的屬性名稱
['__builtins__', '__name__', 'struct']
>>> dir(struct) # 顯示struct子產品的屬性名稱
['Struct', '__all__', '__builtins__', '__cached__','__doc__', '__file__',
'__initializing__', '__loader__', '__name__','__package__',
'_clearcache','calcsize', 'error', 'pack', 'pack_into',
'unpack','unpack_from']
>>> classShape:
... def__dir__(self):
... return ['area', 'perimeter', 'location']
>>> s = Shape()
>>> dir(s)
['area', 'location', 'perimeter']
17.divmod(a,b)
參數a,b為非負數的數字。在使用整數除法時,該函數傳回由a與b的商和餘數組成的一堆數字,其結果類似于(a//b,a%b)。對于混合運算類型(包含浮點數float),該函數啟用二進制算數運算符規則,其結果類似于(q,a%b),q=math.floor(a/b),但q也可以小于1。無論如何,q * b + a%b的結果都十分接近于a(一般不等,這是由于計算機位數有限所必然産生的),如果a%b不為零,則它具有與b相同的符号,并且0<= abs(a%b)<abs(b)。
18. enumerate(iterable,start=0)
該枚舉函數傳回一個枚舉對象。iterable必須是一個序列、疊代器或者其它可疊代的對象。由enumerate函數傳回的疊代器方法__next__()将輸出一個由計數值(從start參數開始,預設值為0)和可疊代對象的一個順序元素組成的元組。
例如:
>>> seasons= ['Spring','Summer','Fall','Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
該函數等價于下列函數:
>>> seasons= ['Spring','Summer','Fall','Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
19. eval(expression,globals=None, locals=None)
參數expression是一個字元串,參數globals、locals屬于可選參數。一旦選擇傳輸globals,其對象應為字典;選擇傳輸locals參數,其對象應為映射對象。
expression參數所對應的字元串将被解析為Python表達式(或者說是條件清單),它使用globals和locals這兩個參數所對應字典作為全局或本地命名空間。如果globals字典存在并且缺少'__builtins__'方法,則在解析表達式之前将目前全局變量複制到全局變量空間中。 這意味着表達式可以無障礙通路标準的builtins子產品。如果省略了本地字典,則預設為全局字典。 如果兩個字典均被省略,則在調用eval()的環境中執行表達式。傳回值是評估表達式的結果,文法錯誤被報告為例外。
例如:
>>> x =1
>>> eval('x+1')
2
20. exec(object[,globals[, locals]])
這個函數支援Python代碼的動态執行。object必須是字元串或代碼對象。如果它是一個字元串,則将該字元串解析為一組Python語句,然後執行該語句(除非發生文法錯誤)。 如果它是一個代碼對象,它隻是被執行。在任何情況下,執行的代碼都應該作為有效的檔案輸入。請注意,即使在傳遞給exec()函數的代碼的上下文中,return和yield語句也可能不在函數定義之外使用。傳回值是None。
在所有情況下,如果省略可選部件,則代碼将在目前範圍内執行。如果隻提供全局變量,則它必須是一個字典,它将用于全局變量和局部變量。如果給定全局變量和局部變量,它們分别用于全局變量和局部變量。如果提供,本地人可以是任何映射對象。請記住,在子產品級别,全局變量和本地變量是相同的字典。如果exec擷取兩個單獨的對象作為全局變量和局部變量,那麼代碼将被嵌入類定義中執行。
如果globals字典不包含鍵__builtins__的值,則将内置子產品的内置字典的引用插入到該鍵下。通過這種方式,您可以通過将自己的__builtins__字典插入到全局變量中,然後将其傳遞給exec(),進而控制可執行代碼可用的内建函數。