【Python】C言語との記述法の違いを比較

この記事では、PythonとC言語との記述法の簡単な違いの比較をソースコード付きで解説します。

Python・C言語の違い

PythonはC言語よりも非常に短いコードで処理を記述できます。
今回は、実際にC言語と簡単なプログラムで比較してみます。

Hello World!

まずは、プログラミング入門時にお馴染みの「Hello World!」。
C言語とPythonで書くとそれぞれ次のようになります。

C言語

#include <stdio.h>

int main(void)
{
    printf("Hello World!");
    return 0;
}

Python3

print("Hello World!")

C言語の標準出力はprintf関数ですが、Pythonはprint関数と微妙に関数名が違います。
また、PythonではC言語のように「main関数」や「標準出力のためのライブラリ読み込み」は必要ありません。
文末にセミコロン(;)をつける必要もありません。
そのため、Python「Hello World」は1行でかけてしまいます。

ただし、日本語の文字列を扱う場合、冒頭に「# -*- coding: utf-8」と付けます。

# -*- coding: utf-8
print("こんにちは世界")

変数の宣言・代入

続いて変数の宣言と代入を比較します。

C言語

#include <stdio.h>

int main(void)
{
    int num;
    num = 2;

    return 0;
}

Python

num = 2

Pythonには変数宣言、型宣言はありません。
最初からそのまま変数に代入できます。
尚、変数の型は代入された値によって自動的に決まります。

繰り返し(while文)

繰り返しの制御構文(while文)の比較をします。

C言語

#include <stdio.h>

int main(void)
{
  int i = 0;

  while(i < 5){ 
    printf("%d\n", i);
    i++; 
  }
  return 0;
}

Python

i = 0

while i < 5:
  print(i)
  i += 1

C言語では括弧({~})で括って制御範囲を示すのに対し、Pythonではコロン(:)とインデント(空白)で制御範囲を表します。
これはwhile文に限らず、for文、if文、関数定義などでも同じです。
そのためPythonでは「インデント」がとても重要となります。
また、「i = i + 1」の略記がPythonでは「i += 1」となります。
Print文に変数をそのまま代入するだけで値を標準出力することもできます。

- 参考記事
1 【C言語】while文の使い方 (条件式など)
2 【Python】while文で繰り返し処理(反復)

繰り返し(for文)

繰り返しの制御構文(for文)の比較をします。

C言語

#include <stdio.h>

int main(void)
{
  int i = 0;

  for(i=0; i<5; i++){
      printf("%d\n", i);
  }

  return 0;
}

Python

# -*- coding: utf-8
for i in range(0, 5, 1):
    print(i)

for文の書き方は大きく異なります。
Pythonでは、カウント変数iの初期値と終了条件を指定するのにrangeを使います。
range(0, 5, 1)だと初期値は0でカウント数は+1です。
そして、カウント変数が5以下の間、処理を繰り返します。
ただし、カウント変数が+1の場合、range(0, 5)と略記できます。
また、初期値が0ならrange(5)とさらに略記できます。

for i in range(5): # = range(0, 5, 1)
    print(i)
- 参考記事
1 【C言語】for文の使い方 (条件式など)
2 【Python】for文で繰り返し処理(反復)

条件分岐(if文)

条件分岐(if文)の比較をします。

C言語

#include <stdio.h>
     
int main(void)
{
      int i = 3;

      if(i = 1){
        printf("i=1");
      }
      else if(i = 2){
        printf("i=2");
      }
      else if(i = 3){
        printf("i=3");
      }
      else {
        printf("i=4");
      }
      return 0;
} 

Python

i = 3

if i == 1:
  print("i = 1")
elif i == 2:
  print("i = 2")
elif i == 3:
  print("i = 3")
else:
  print("i = 4")

C言語の「else if」がPythonでは「elif」と地味に短くなっているのがポイントです。

- 参考記事
1 【C言語】if文の使い方 (条件式など)
2 【Python】if文で繰り返し処理(反復)

関数定義・呼び出し

関数の定義と呼び出しで比較します。

C言語

#include <stdio.h>

// 関数定義
int fanc(int a, int b){
  int c = 0;
  c = a + b;
  return c;
}

int main(void)
{
  int x = 0;
  
  // 関数呼び出し
  x = fanc(1, 2);
  
  printf("%d", x); // 3
  
  return 0;
}

Python

# -*- coding: utf-8
# 関数定義
def fanc(a, b):
  c = a + b
  return c

# 関数呼び出し
x = fanc(1, 2)

print(x)  # 3

Pythonでは、関数定義に「def 関数名:」を使います。
C言語のように関数や引数に型を定義する必要はありません。

配列・リスト

C言語の配列に近いものとして、Pythonにはリストがあります。
両者を比較しています。

C言語

#include <stdio.h>

int main(void)
{
  int list1[5] = {1, 2, 3, 4, 5};
  int i = 0;

  for(i=0; i<5; i++){
      printf("%d\n", list1[i]);
  }

  printf("%d", list1[1]);

  return 0;
}

Python

list1 = [1, 2, 3, 4, 5]

print(list1) # [1, 2, 3, 4, 5]
print(list1[1]) # 2

Pythonでは、print関数に配列を渡すだけで中身を確認できます。
他にもスライスという便利な機能でリストの一部分のみを取り出したり、リストの長さを途中で変更することも可能です。
また、異なるデータ型の要素をもつことができます。

# -*- coding: utf-8
# 異なるデータ型の要素をもてる
list2 = [1, 'two', 3, 'four', 5]

# スライスで2~3番要素のみ取り出して表示
print(list2[2:4]) # [3, 'four']

このようにPythonのリストは自由度が高い一方、要素へ順にアクセスすると処理が重くなるデメリットを抱えています。
そこで、大量のデータを扱う場合は、NumPy配列と呼ばれるC言語の配列に近いものを使います。
ただし、NumPy配列はPython標準機能ではなく、「NumPy」と呼ばれる外部ライブラリを読み込むことで利用できます。

- 参考記事
1 【C言語】配列の宣言・初期化・代入
2 【Python】リストの使い方

関連記事

Python入門 サンプル集

シェア&フォローお願いします!