sql 代替游標的寫法示例。本站提示廣大學習愛好者:(sql 代替游標的寫法示例)文章只能為提供參考,不一定能成為您想要的結果。以下是sql 代替游標的寫法示例正文
少勞多得
Decorator 與 Python 之前引入的元編程籠統有著某些配合的地方:即便沒有這些技巧,您也一樣可以完成它們所供給的功效。正如 Michele Simionato 和我在 心愛的 Python 專欄的晚期文章 中指出的那樣,即便在 Python 1.5 中,也能夠完成 Python 類的創立,而不須要應用 “元類” 掛鉤。
Decorator 基本上的平淡與之異常相似。Decorator 所完成的功效就是修正緊接 Decorator 以後界說的函數和辦法。這老是能夠的,但這類功效重要是由 Python 2.2 中引入的 classmethod() 和 staticmethod() 內置函數驅動的。在新式作風中,您可以挪用 classmethod(),以下所示:
清單 1. 典范的 “新式” classmethod
class C: def foo(cls, y): print "classmethod", cls, y foo = classmethod(foo)
固然 classmethod() 是內置函數,但並沒有奇特的地方;您也能夠應用本身的辦法轉換函數。例如:
清單 2. 典范的 “新式” 辦法的轉換
def enhanced(meth): def new(self, y): print "I am enhanced" return meth(self, y) return new class C: def bar(self, x): print "some method says:", x bar = enhanced(bar)
decorator 所做的一切就是使您防止反復應用辦法名,而且將 decorator 放在辦法界說中第一處說起其稱號的處所。例如:
清單 3. 典范的 “新式” classmethod
class C: @classmethod def foo(cls, y): print "classmethod", cls, y @enhanced def bar(self, x): print "some method says:", x
decorator 也能夠用於正則函數,采取的是與類中的辦法雷同的方法。使人驚異的是,這一切是如斯簡略(嚴厲來講,乃至有些不用要),只須要對語法停止簡略修正,一切器械便可以任務得更好,而且使得法式的論證加倍輕松。經由過程在辦法界說的函數之前列出多個 decorator,便可將 decorator 鏈接在一路;優越的斷定可以有助於避免將過量 decorator 鏈接在一路,不外有時刻將幾個 decorator 鏈接在一路是成心義的:
清單 4. 鏈接 decorator
@synchronized @logging def myfunc(arg1, arg2, ...): # ...do something # decorators are equivalent to ending with: # myfunc = synchronized(logging(myfunc)) # Nested in that declaration order
Decorator 只是一個語法糖,假如您過於迫切,那末它就會使您搬起石頭砸了本身的腳。decorator 其實就是一個至多具有一個參數的函數 —— 法式員要擔任確保 decorator 的前往內容依然是一個成心義的函數或辦法,而且完成了原函數為使銜接有效而做的工作。例如,上面就是 decorator 兩個不准確的用法:
清單 5. 沒有前往函數的毛病 decorator
>>> def spamdef(fn): ... print "spam, spam, spam" ... >>> @spamdef ... def useful(a, b): ... print a**2 + b**2 ... spam, spam, spam >>> useful(3, 4) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: 'NoneType' object is not callable
decorator 能夠會前往一個函數,但這個函數與未潤飾的函數之間不存在成心義的聯系關系:
清單 6. 疏忽傳入函數的 decorator
>>> def spamrun(fn): ... def sayspam(*args): ... print "spam, spam, spam" ... return sayspam ... >>> @spamrun ... def useful(a, b): ... print a**2 + b**2 ... >>> useful(3,4) spam, spam, spam
最初,一個表示更優越的 decorator 可以在某些方面加強或修正未潤飾函數的操作:
清單 7. 修正未潤飾函數行動的 decorator
>>> def addspam(fn): ... def new(*args): ... print "spam, spam, spam" ... return fn(*args) ... return new ... >>> @addspam ... def useful(a, b): ... print a**2 + b**2 ... >>> useful(3,4) spam, spam, spam 25
您能夠會質疑,useful() 究竟有何等有效?addspam() 真的是那樣精彩的加強 嗎?但這類機制至多相符您平日能在有效的 decorator 中看到的那種形式。
高等籠統簡介
依據我的經歷,元類運用最多的場所就是在類實例化以後對類中的辦法停止修正。decorator 今朝其實不許可您修正類實例化自己,然則它們可以修正依靠於類的辦法。這其實不能讓您在實例化進程中靜態添加或刪除辦法或類屬性,然則它讓這些辦法可以在運轉時依據情況的前提來變革其行動。如今從技巧下去說,decorator 是在運轉 class 語句時運用的,關於頂級類來講,它更接近於 “編譯時” 而非 “運轉時”。然則支配 decorator 的運轉時決議計劃與創立類工場一樣簡略。例如:
清單 8. 硬朗但卻深度嵌套的 decorator
def arg_sayer(what): def what_sayer(meth): def new(self, *args, **kws): print what return meth(self, *args, **kws) return new return what_sayer