概要
調べた限りでは,MATLABでは位置引数による代入しかなく,Pythonにあるキーワード引数がないっぽいです.(R2021a現在.実はあるとかだったらコメント欄で教えてくださいm(_ _)m)
のでキーワード引数による代入を無理やりしてみました.
その前に 「位置引数」「キーワード引数」
通常,関数に値を代入する時,関数側で定義された順番で変数に値が渡されます.(位置引数)
↓Pythonの例
def Subtract(a, b):
return a - b
Subtract(4, 3)
この場合,aに4が,bに3が渡されて,値1が返ってきます.
Subtract(b=5, a=9)
しかし,= を使って,bに5を代入して,aに9を代入してやるんだ!
とすれば,a, bにそれぞれ9, 5が代入され,値4が得られます.
このように,= を使って,代入先の変数とその値を紐づけて指定してあげるこの引数を,
キーワード引数と言います.
この機能がMATLABにはないため,MATLABでもこれっぽいことを無理やりしたのが,以下の内容です.
成果
がこちらです.
function Subtract(a, b, varargin)
if nargin > 2 %関数へ渡された値が3つ以上ある時 True
for i = 1:size(varargin, 2)
c = cell2mat(varargin(i));
eval(c)
end
end
a - b
end
例1
Subtract(4, 3)
1が出力されます.
例2
Subtract(0, 0, 'b=5', 'a=9')
4が出力されます.
説明
vararginは,関数に渡された値の中で,余ったものを全部格納する変数です.詳しくは以下のドキュメンテーションを見てください.
MATLAB documentation : 可変長の入力のサポート
また,evalはStringやchar等の文字をコードとして実行する関数です.
MATLAB documentation : MATLAB式を評価する
Pythonのeval関数の解説のページでも貼っときます.
MATLABとPythonのeval関数は機能一緒です.↓の解説の方が100倍分かりやすいです.
TechAcademy : Pythonのeval関数について現役エンジニアが解説【初心者向け】
で,上のコードは,
・値の入力が2つなら,それらを左からa, bへ代入
・値の入力が3つ以上なら,3つ目以降の文字列をコードとして実行
するようになってます.
つまり,例1では上で説明した位置引数による代入され,
そのまま引き算が計算されることで,値1が出力されます.
例2ではa, bにそれぞれ0が代入されたのち,b=5, a=9 のコードが実行されることで,
a, bそれぞれが9, 5に上書きされ, 値4が出力されます.
ちなみに,aとbに0を代入しているのは,エラー回避のためです.
#最後に
既存の関数の入力引数を指定するところの一番右にvararginを追加して,
二行目以降にifの下をコピペして,
if文の条件であるnarginの右の値を調整すれば,
すぐにでも関数をキーワード引数対応にできるかと思います.