※当ブログ内容はPRを含みます

C言語経験者向け!PythonとC言語の6つの相違点【入門編】

こんちゃっす、ダイブツです。

僕は今まで主にC言語を仕事で使っていたんですが、少し前にAidemyというAI学習サイトを利用してPythonの勉強をしました。
あと勉強の為に、自分でWebアプリも作ってみたりもしています。

その時に

ダイブツ

あ!PythonとC言語はここが違うのか!

と分かった6つの点をまとめていきますね。
C言語経験者のあなたがこの記事を読めば、Python全体の理解がグッと早くなりますよ。
(僕が学習始める時にもこの記事があったら良かったのに・・・!!)

ちなみに、内容を詰め込みまくって記事内容がボリューミーです。
その分、役に立つ情報になっているはず!

1点目:基本的な文法の違い

まず、当然といえば当然ですが、C言語とPythonでは文法がまぁまぁ違います。

僕が気付いただけでも9つの違いがあるので、それぞれ書いていきますね。

1、変数宣言が不要

C言語では変数を使いたい時は、必ず変数宣言をする必要がありました。

ですが、Pythonでは変数の宣言は必要ありません。
いきなり代入から始めちゃって大丈夫です。

変数に代入するものの型によって、変数の型が自動的に決められるという仕様になってます。
C言語に慣れていると、ちゃんと型を宣言してくれた方が、その変数の型がすぐ分かっていいなとは思うんですけどね~、Pythonはこんな仕様なんです。

下は変数iに0を代入する場合で、C言語とPythonそれぞれの書き方を比較しています。

C言語の場合
int i;
i = 0;
Pythonの場合
i = 0

2、C言語に無い変数のデータ型がある

PythonにはC言語にない変数の型もあります。

僕が知っているのは下記の3つのデータ型です。
これ以外にもライブラリ独自の型もあるんですが、それはまた別のお話。

  • bool型
  • string型
  • 複素数型

bool型とstring型は他の言語でもよく見るんですが、複素数型というのがあるのはビックリしました。

そもそも複素数自体あんまり使わないですよね。

僕も大学時代に勉強しただけで、もうほとんど覚えてないですもん。
とりあえずj × j = -1になるってだけ覚えてます。

複素数型は、型としては使えますが、実際使うことはあまり無さそうですね。
bool型とstring型はめっちゃ使います!

3、if文等で{}は使わない

C言語だと、if文を書く時は基本的に{}を使いますよね?

それがPythonだと{}は全く使わなくなります。
代わりに使うのが字下げ(タブ)です。
字下げ(タブ)数も合っていないとエラーになってしまうので注意が必要です。
処理が1行だけかどうかは関係ありません。

字下げしていると思っていたら、タブじゃなくてスペースになっていてもエラーが出たりします。
C言語の感覚でいくと引っかかりやすいので気を付けてください。
僕も頻繁に引っかかってますw

C言語の場合
int i = 0;
if(i == 0) {
	i = i + 1;
} else {
	i = 0;
}
Pythonの場合
i = 0
if i == 0:
	i = i + 1
else:
	i = 0

4、繰り返し文法が独特

Pythonの繰り返し文はまぁ~独特だなーと僕は感じました。

違いを簡単に表現すると、C言語は自分でインデックスを考慮しなきゃいけないのに対し、Pythonは自動でインデックスを考慮してくれるといったイメージです。
自分でインクリメントなんてしません。

とりあえず例を書いたので見てみてください。
違いが分かるはずです。

3~9を繰り返し処理で表示する場合

C言語の場合
int i;
for(i = 3; i < 10; i++){
	printf(%d\n, i);
}
Pythonの場合
for i in range(3, 10):
	print(i)

10個の配列内容を表示する場合

C言語の場合
int i;
int array[10] = {0,1,2,3,4,5,6,7,8,9};
for(i = 0; i < 10; i++){
	printf(%d\n, array[i]);
}
Pythonの場合
array = {0,1,2,3,4,5,6,7,8,9}
for i in array:
	print(i)

ね?これだけで終わっちゃうんですよ?
めっちゃ違和感ないですか?

これがぜんっぜん慣れねーんすよ!!

でもしょうがないですね、慣れるしかないです。

5、条件判定では&&や||等と書かない

if文で使用する条件判定も、C言語とPythonでは違います。

書き方の違いを表にまとめました。

C言語 Python
&&
and
||
or
not
else if
elif

==と!=はPythonでも使えます。
!だけだったら使えないのに、!=は使えるとか微妙な違いすぎてややこしいですよねw

6、switch文が無い!!!

これは衝撃的でした。

ダイブツ

え!Pythonにswitchないの?!

って思わず言っちゃいましたよw

C言語だとめっちゃ使うんですけどね~、仕方がないのでPythonの構文でキレイに見える書き方を模索する必要はありそうです。

7、includeではなくimportと書く

外部ファイルの情報を持ってくるのに、C言語ではincludeと書いていましたが、Pythonではimportと書きます。

importする必要がある関数も、Pythonで変わっているので注意してください。

C言語だとprintf関数は#include しないと使えないですが、Pythonではimportしなくてもprint関数が使えます。
importが必要な関数はまた覚える or その都度調べる必要がありますね。
まぁ、とりあえず関数使ってみて、エラーが出たらimportするぐらいで十分です。

あと、Pythonだと、fromという記述をすれば、外部ファイルの関数だけをインポートすることも可能です。
しかもこれらのimport記述はファイルの先頭に書く必要はありません。

C言語とPythonの記述違いを書いておきますね。
(importしているファイルは、C言語とPythonで全く別物です)

C言語の場合
#include 
Pythonの場合
import numpy
from keras.models import load_model

8、使える演算子、使えない演算子がある

演算子についてもC言語とPythonでは違いがあります。

ざっと対応表にしてまとめたので、下記を見てください。
Pythonだと++と--が使えないんですよ・・・あんなにC言語で使ってたのに・・・。

<〇:使える、×:使えない>

C言語 Python
+(足し算)
-(引き算)
*(掛け算)
/(割り算)
&(AND)
|(OR)
^(XOR)
~(NOT)
<<(左シフト)
>>(右シフト)
!=(異なる)
++(インクリメント)
×
–(デクリメント)
×
&&(AND)
×
||(OR)
×
!(NOT)
×
**(階乗)
×
//(切り捨て割り算)
×

9、コメントアウトの書き方が違う

コメントアウトの書き方は、言語が変わると大抵変わりますが、例にもれずPythonでも変わります。

違いは次の通りです。
複数行コメントの時は、字下げ分をちゃんと合わせないとエラーになるので注意してください!
C言語の感覚で書くとエラーになります。

C言語 Python
1行コメント
//
#
複数行コメント
/* */
”’ ”’ or “”” “””

2点目:配列の使い方が違う

PythonはC言語に比べて、配列で扱えるものが大分違います。

配列の種類を下記にまとめました。
使い方まで書くと、この記事の内容がさらに増えてしまうので省略させてくださいm(_ _)m

C言語と考え方が同じ配列

タプル(tuple)

C言語でいうconst配列と同じ考えの配列。

リスト(list)

C言語でいう通常の配列と同じ考えの配列。

New!ディクショナリ・辞書(dict)

Pythonのみ登場する配列。
配列の中に検索キーも一緒に設定する。配列を使う際には、その検索キーを元に処理をすることができる。

New!セット・集合(set)

Pythonのみ登場する配列。
C言語でいう通常の配列について、重複した値を除外したものと考えればいいです。
あと、このセット型だと配列のインデックスもないみたいです。
どういう時に使うんだ?とも思いますよね?
それは僕も分かりません!w僕もほとんど使っていないです。

3点目:例外処理がある

Pythonでは例外処理が用意されています。
他の言語でもよく実装されている機能ですよね。
ただ、C言語には無かった機能です。

簡単に言うと、アプリが落ちるような処理を実行しようとした時に検知して、別の処理に飛ばしてくれる機能です。

この機能自体はPython独自の機能というわけでは無いので、細かい説明は省略しますね。

4点目:Pythonはオブジェクト指向の言語

PythonはC言語と異なり、オブジェクト指向の言語です。

なので、クラスの記述等が登場します。

C言語でもオブジェクト指向的な構造を目指したりしますが、Pythonで書くなら実際に記述から変わってきます。

オブジェクト指向についても、他の言語で散々言われている内容なので、ここでの説明は省略しますね。
ただ、考え方としては凄く重要な内容です!むしろPythonとか関係なく必要な考え方!

5点目:名前の無い関数を作成できる

「は?関数の名前無いのにどうやって使うの?」

と僕も思ったんですが、Pythonだとそんなことができちゃうんですねぇ・・・。(無名関数と呼ばれています)

使い慣れなさすぎて、自分でコーディングする時は特に使ってないですw

他の人のコードを読み解く為に覚えておいた方がいいぐらいかもしれません。
C言語でいうポインタのポインタぐらいのイメージかなぁ。

Webで公開されてるPythonのプログラムを見てても、全然無名関数は使われているのを見ないので、正直あんまり必要ないんじゃ・・・?とも思っています。

なので、書き方についてはあえてここでは説明しません!
そんなに使わないでしょう!

6点目:機械学習は全く別物

「AI・機械学習をやるならPython一択」という言葉をよく聞きますが、Python自体に機械学習を行う仕様はありません。

あくまでも、機械学習に関するライブラリをPythonで使っているというだけです。

なので、Python以外の言語で機械学習に便利なライブラリが作られたら、今後はPythonではなく、その別の言語が機械学習の主流になる可能性もあります。

勘違いすると良くないので、念の為書きました。
「今は」Python一択で間違いないですね!(そんなに他の言語状況知らないけど)

おまけ:機械学習でよく使われるライブラリ

Python自体の処理ではないですが、機械学習でよく使われるライブラリも簡単に紹介しておきますね。

ほとんどのPython学習内容で出てくるライブラリです。
概要だけでも掴んでおくと学習しやすくなるはず!

numpy

多重配列用のライブラリです。
機械学習は配列のオンパレードなので、このライブラリがほぼ必須になってきます。
個人的に使うのにちょっと慣れが必要かなと感じてます。

pandas

ざっくり言うと、データをこちょこちょするライブラリです。
機械学習はデータをいじくりまくります。
なので、このこちょこちょライブラリをよく使うってことですね。

matplotlib

デバッグ環境で、グラフとか色んな結果を表示するのに使われます。
パッと分かる結果が出せるので、とても便利なライブラリです。

最後に

や、やっと書き終わった・・・。

必要なことを書いていったらこんな長さになってしまいました。
僕と同じようなC言語経験者のあなたがPython学習を始めるのに役に立てれば幸いです。

もし、間違っている内容を見つけたらコメントで指摘もらえると助かります。
一緒にAIの知識をつけていきましょうね!

2 Comments

アバター 匿名

これまで作ったCのプログラムをpythonに書換えようとして入門書(といってもかなり厚い本)を読んでいて、混乱しそうな予感がしてきた時にこのページを見つけました。頭の中が整理できて、何とかなりそうな気持になりました。ありがとうございました。

返信する
アバター 匿名

よくまとまっていて、とても分かりやすかったです。
python のイメージがつかめました。ありがとうございます。
便利そうな点もありますけれども、長年“C”で書いてきた身としては、“C”でいいじゃん。って感じですね。

返信する

気軽にコメントどうぞ!

内容を確認してから、下記の「コメントを送信する」ボタンを押してください。