C#プログラマからみたPython 関数の基本編

基本の呼び出し方

# Python
len('hello')

このように、関数名の後ろに「()」を付与することがPythonで関数を呼び出すためのルール。


関数定義の方法

# Python
def funcSum(args1, args2):
    return args1 + args2
// C#
int FuncSum(int args1,int args2)
{
    return args1 + args2;
}

関数を定義するには「def文」を利用する。
defの後に関数名を置き、引数を()で囲む。 Pythonではあらかじめ型を定義することができない(動的に決まる)ので、関数や引数に型を指定しなくて良い。
なお、C系の言語でよく利用される{}は、Pythonではインデントで表現される。

ところでC#のコードからはあえて省いちゃったんだけど、Pythonってアクセス修飾子がないの? → あとで調べる。


引数

前述のとおり、関数名の後に続く()に引数を指定する。
Pythonでは型を指定せずとも呼び出すことが可能になっているため、どんな型のオブジェクトであっても渡すことが可能。

ただし、引き換えとしてコンパイル時の静的チェックの恩恵も受けることが出来ないため、型が合わない場合は実行時エラーとなる。従ってPythonでは引数で受け取った型が何であるかをよく確認する必要があるはず。

引数のデフォルト値

Pythonでも省略可能引数を定義することが可能。
関数の定義で、引数を受け取る変数を指定する時に値を導入しておくと、デフォルト値を指定できる。

# Python
def funcSum(args1, args2=100):

引数のキーワード指定

C#では名前付き引数と呼ばれていたもの。
C#ではあんまり使ったことがないのだけど、名前付きで引数を指定してやると、引数の順序を自由に書くことが出来る。

# Python
foo = funcSum(args1=22, args2=33)
// C#
var foo = FuncSum(args1:1,args2:4);

違いは「:」か「=」かってぐらい。通常と同じように書けるPythonの方が便利かな。


参照渡しと値渡し

参照渡し値渡しについて、C#では「ref」キーワードを使って区別していたが、Pythonではキーワードでは区別しない。
書き換え可能オブジェクトを関数の引数として渡した場合に、参照渡しと同じように扱われるとのこと。

えーぶっちゃけ今のPythonレベルだとよくわからないので、ここは後で調べようと思います。