Image

PythonとC言語の関数について使い方と違いを押さえよう!!

PythonとC言語の関数について使い方について違いをまとめています。PythonとC言語の関数の使い方に大きな差はありません。関数の定義の方法に少し違いがあるだけですので簡単に理解することができます。

PythonとC言語の関数の使い方の違いについて

今回はPythonとC言語の関数の違いについて学習します



目次

01. PythonとC言語の関数について

02. PythonとC言語の関数の宣言と定義について

03. PythonとC言語の値渡しについて

04. PythonとC言語の再起について

05. まとめ


01. PythonとC言語の関数について


一般に関数とはf(v)のように式で使えるようにしたものをいいます

f関数名といいいます。

実際にその値を計算することを、その関数の呼び出しといいvをその呼び出しの引数といいます。

呼び出した結果得られる値戻り値といいます

あらかじめ用意されているprintfやscanfなどは標準関数と言います

自分で設定する関数はユーザ関数といいます


C言語の関数について前提となる知識に触れておきます。

C言語のプログラムにはmain関数が必要です

これはどんなに小さなプログラムでもmain関数がなければなりません。


main関数が満たすべき条件


int型の戻り値を持つ

引数は取らないか2個持つかのいずれかでなければならない

C言語のプログラムを実行することはmain関数を呼び出すことに等しい



## C言語
main(){
...
int m, n;
A(m);
B(n);
...
return 0;
}


C言語でプログラムを書くときはmain関数の中にプログラムを作成していきます。

main関数の戻り値プログラムの実行に障害が生じたか否かを表すと解釈されます

main関数の戻り値は基本的に0となるようなプログラムを作りましょう

戻り値が0であれば普通にプログラムが終了したと解釈されま



## C言語
main(){
...
return 0;
}


ちなみに関数は、モジュールといって関数を定義したいくつかのCファイルに分けて呼び出すことも可能です。

モジュールの呼び出しは、C言語でもPythonでも基本的にプログラムの1番最初にimportincludeなどで外部ファイルをインポートします。


02. PythonとC言語の関数の宣言と定義について


C言語から関数の宣言と定義について学んでいきましょう。

C言語では関数を実際に定義する前にしなければならないことがあります。

それは関数のプロトタイプ宣言です

あらかじめ戻り値のデータ型引数のデータ型を指定します



## C言語
戻り値のデータ型 関数名(引数の並び);
int max(int, int);
int main(void);
void exchange(int x, int y);


このように関数のプロトタイプ宣言を行います。

関数の引数は与える値で戻り値は計算によって得られた結果です

voidは戻り値がないことを示します



## C言語
int max(int, x int y){
if(x > y)return x;
return y;
}


このようにして関数を定義することができます



## C言語
int main(){
...
max(x, y)
...
}


適切に定義した関数はこのようにして呼び出すことができます

関数の基本はこれだけ押さえておけば大丈夫です

あとは自分で処理を書いて呼び出して値をゲットするだけです。


次にPythonの関数の定義について学習していきます。



## Python
def max(x, y):
if x > y:
print(x)
else:
print("too big")

max(3, 5)
>>>too big



## Python
def 関数名():
実行文


Pythonで関数はdefで定義することができます

defで定義した関数はC言語と同じように引数を与えて呼び出すことが可能です

Pythonにはmain関数関数のプロトタイプ宣言はありません

defで定義してそのまま呼び出して使用することができます。

Pythonでもモジュールライブラリといった関数を定義した外部ファイルは多数存在しますし、作成することも可能です

C言語と同じようにプログラムの最初の方にimportでインポートしてしまえば全て利用することができます

ちなみにPythonではreturnに何も書かなかった場合はNoneを返します

つまりC言語と同じように0を返しているということです。


Pythonには関数の種類が他にもいくつかあります。

これから触れていきます。

ついでにPythonのグローバル変数とローカル変数について押さえましょう



## Python
i = 0 #グローバル変数

def big():
print i #参照することはできる
global i #global宣言してやれば
i += 1 #代入することができます


グローバル変数は関数の外で定義された変数のことを指します

global宣言をして変更を加えることが可能です

ちなみにローカル変数は関数の中で定義された変数です



## Python
## グローバル変数とローカル変数
def big():
for n in globals().keys():
print "グローバル変数: %s = %s" % (k, globals()[n])
for n in locals().keys():
print "ローカル変数: %s = %s" % (k, locals()[n])
big()


global()local()は、それぞれグローバル変数ローカル変数を辞書型で返します



## ラムダ式
mgh = lambda x, y: x + y
print mgh(1, 2)


ラムダ式(lambda)名前のない関数を作ることができます

なおラムダ式は式として扱われます


イテレータ(iterator)はfor文で使用することができる繰り返し機能を持つオブジェクトです

ジェネレータ(yield)はイテレータを返すジェネレータを定義するときに使用されます

デコレータ(@)は関数を実行する前後に特殊な処理を実行したい場合に使用します


03. PythonとC言語の値渡しについて


C言語の関数の呼び出しではすべてその計算した結果が関数に渡されます

関数から戻される値は戻り値だけです

この考え方を値渡しといいます。

例えば2つの与えられた引数をそのまま入れ替えて値を返すプログラムがあったとします

そのプログラムで宣言された引数は関数に与えられ、入れ替えられて値が返しますが、main関数で定義された引数の値は入れ替わっていません

つまり関数に与えられる引数はmain関数の中で宣言された引数のコピーでしかないというわけです

関数によって元の引数の値を変更することはできないということになります。

PythonとC言語の両方で基本的な考え方として対応しているので覚えておきましょう。


04. PythonとC言語の再帰について


再帰呼び出しとは、例として関数f()のなかで関数f()を呼び出すことです

再帰とはある事柄を呼び出すのにその事柄自身を使用することをいいます

再帰処理を問題なく行うことができる関数帰納的特性を持っている必要があります

少し数学的で難しい内容になってしまいますが漸化式をイメージするといいと思います。

PythonでもC言語でも再帰の話は出てきます。

コードを見て直感的に理解した方がわかりやすいと思います。

例として2進表現をするコードの関数定義部分を用いて理解の助けにして下さい。



## C言語
## 関数の作成
void bit(int n)
{
if(n <= 1){
printf("%d", n);
}
else
{
bit(n / 2);
printf("%d", n % 2);
}
}


nが1以下になるまで関数自身が再帰的に呼び出されます

for文とは違った目に見えない繰り返しのような処理が行われます


04. まとめ


お疲れ様でした。

ここまで読んでいただきありがとうございました。

今回はPythonとC言語の関数の違いについて学習しました。

関数はプログラミングの基本の考え方なのでしっかりと押さえましょう。