ユーザー定義関数defは呼び出しの際に引数を渡すが、必ず値を渡す必須の引数と、必要に応じて値を渡すオプショナルな引数がある。オプショナルな引数にはデフォルトの引数値を設定し、値が渡されなかった場合はデフォルト値を用いる。
1. デフォルトの引数値
関数定義def文で引数に値を設定するとデフォルト値になる。関数呼び出し文で引数が指定されない場合はデフォルト値が用いられる。これを使うと必須の引数と必要に応じて設定するオプショナルな引数に分けることができる。
例として三角形の描画する関数'triangle'を定義する場合。頂点の位置x,yと辺の長さedgeを必須の引数として、def文で値を設定しない。線の色はcolor=(255, 255, 255)、つまり白をデフォルトの引数値として設定する。線の太さthickness=4として4pixelをデフォルトの引数値として設定する。
呼び出し文では必須の引数x, y, edgeのみ与え、color, thicknessについては値を渡さずデフォルトの引数値を用いる。
import cv2
import numpy as np
import math
img = np.zeros((300, 400, 3), np.uint8)
def triangle(x, y, edge, color=(255, 255, 255), thickness=3):
pts = np.array([[x, y],
[int(x-edge), int(y+edge*math.sqrt(3))],
[int(x+edge), int(y+edge*math.sqrt(3))]])
cv2.polylines(img, [pts], True, color, thickness, cv2.LINE_AA)
triangle(170, 50, 80)
cv2.imwrite('triangle.png', img)
実行結果
関数'triangle'の引数color, thicknessを指定した場合。青の太さ12pixelで描画される。
import cv2
import numpy as np
import math
img = np.zeros((300, 400, 3), np.uint8)
def triangle(x, y, edge, color=(255, 255, 255), thickness=3):
pts = np.array([[x, y],
[int(x-edge), int(y+edge*math.sqrt(3))],
[int(x+edge), int(y+edge*math.sqrt(3))]])
cv2.polylines(img, [pts], True, color, thickness, cv2.LINE_AA)
triangle(170, 50, 80, (255, 0, 0), 12)
cv2.imwrite('triangle.png', img)
実行結果
2. キーワード引数
特定のオプション引数のみに値を設定する場合には関数定義文で用いられる引数名(キーワード)を用いて値を設定する。
三角形描画関数'triangle'において、オプション引数のうち線の太さを指定する引数'thickkness'のみに値を設定する場合。
import cv2
import numpy as np
import math
img = np.zeros((300, 400, 3), np.uint8)
def triangle(x, y, edge, color=(255, 255, 255), thickness=3):
pts = np.array([[x, y],
[int(x-edge), int(y+edge*math.sqrt(3))],
[int(x+edge), int(y+edge*math.sqrt(3))]])
cv2.polylines(img, [pts], True, color, thickness, cv2.LINE_AA)
triangle(170, 50, 80, thickness=18)
cv2.imwrite('triangle.png', img)
実行結果
3. リファレンス
Python チュートリアル > 4. その他の制御フローツール > 4.7. 関数定義についてもう少し > 4.7.1. デフォルトの引数値
Python チュートリアル > 4. その他の制御フローツール > 4.7. 関数定義についてもう少し > 4.7.2. キーワード引数



0 件のコメント:
コメントを投稿