範例 (一)
 畫出若干個函式的最大值,最小值,平均值
以下利用類別裝飾器計算若干個函式的最大值,最小值與平均值,
函式的數量可多可少,統一輸入裝飾器的函式運算子內計算。程式
最後利用 pylab 畫出各個圖形如下:
10附錄B 裝飾器
範例 (二)
11附錄B 裝飾器
import pylab
# 類別裝飾器
class Fn_Val :
# 起始設定方法
def __init__( self , fn ) :
self.fn = fn
# 函式運算子
def __call__( self , xs , *fns ) :
ys = []
for x in xs :
ys += [ self.fn( list( map( lambda f : f(x) , fns ) ) ) ]
return ys
@Fn_Val
def maxf(xs) : return max(xs)
@Fn_Val
def minf(xs) : return min(xs)
@Fn_Val
def avgf(xs) : return (max(xs)+min(xs))/2
# sin(x/2)
def sin2(x) : return pylab.sin(x/2)
範例 (三)
12附錄B 裝飾器
if __name__ == ’__main__’ :
pi = pylab.pi
# [0,2pi] 200 個點
xs = pylab.linspace(0, 2*pi, 200)
# 利用裝飾器計算若干函數的最大值,最小值,平均值
ys1 = maxf(xs, pylab.sin, pylab.cos, sin2)
ys2 = minf(xs, pylab.sin, pylab.cos, sin2)
ys3 = avgf(xs, pylab.sin, pylab.cos, sin2)
# 白底
pylab.figure(facecolor=’w’)
# 畫 sin(x) cos(x) sin(x/2) 函式圖形
pylab.plot(xs, pylab.sin(xs), color=’r’, lw=3, label=’sin(x)’)
pylab.plot(xs, pylab.cos(xs), color=’g’, lw=3, label=’cos(x)’)
pylab.plot(xs, sin2(xs), color=’b’, lw=3, label=’sin(x/2)’)
# 畫 max min avg 圖形
pylab.plot(xs, ys1, ’*c:’, lw=1, label=’max val’)
pylab.plot(xs, ys2, ’om:’, lw=1, label=’min val’)
pylab.plot(xs, ys3, ’.k:’, lw=1, label=’avg val’)
pylab.title("max, min, avg values of sin(x), cos(x), sin(x/2)", fontsize=20)
pylab.grid()
pylab.legend()
pylab.show()

Appendix B 範例

  • 1.
  • 2.
    範例 (二) 11附錄B 裝飾器 importpylab # 類別裝飾器 class Fn_Val : # 起始設定方法 def __init__( self , fn ) : self.fn = fn # 函式運算子 def __call__( self , xs , *fns ) : ys = [] for x in xs : ys += [ self.fn( list( map( lambda f : f(x) , fns ) ) ) ] return ys @Fn_Val def maxf(xs) : return max(xs) @Fn_Val def minf(xs) : return min(xs) @Fn_Val def avgf(xs) : return (max(xs)+min(xs))/2 # sin(x/2) def sin2(x) : return pylab.sin(x/2)
  • 3.
    範例 (三) 12附錄B 裝飾器 if__name__ == ’__main__’ : pi = pylab.pi # [0,2pi] 200 個點 xs = pylab.linspace(0, 2*pi, 200) # 利用裝飾器計算若干函數的最大值,最小值,平均值 ys1 = maxf(xs, pylab.sin, pylab.cos, sin2) ys2 = minf(xs, pylab.sin, pylab.cos, sin2) ys3 = avgf(xs, pylab.sin, pylab.cos, sin2) # 白底 pylab.figure(facecolor=’w’) # 畫 sin(x) cos(x) sin(x/2) 函式圖形 pylab.plot(xs, pylab.sin(xs), color=’r’, lw=3, label=’sin(x)’) pylab.plot(xs, pylab.cos(xs), color=’g’, lw=3, label=’cos(x)’) pylab.plot(xs, sin2(xs), color=’b’, lw=3, label=’sin(x/2)’) # 畫 max min avg 圖形 pylab.plot(xs, ys1, ’*c:’, lw=1, label=’max val’) pylab.plot(xs, ys2, ’om:’, lw=1, label=’min val’) pylab.plot(xs, ys3, ’.k:’, lw=1, label=’avg val’) pylab.title("max, min, avg values of sin(x), cos(x), sin(x/2)", fontsize=20) pylab.grid() pylab.legend() pylab.show()