More Related Content
Similar to Appendix B 範例 (20)
More from hungchiayang1 (20)
Appendix B 範例
- 2. 範例 (二)
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)
- 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()