程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> sql 代替游標的寫法示例

sql 代替游標的寫法示例

編輯:MSSQL

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved