🤖

C言語プログラマから見たPythonのポイント

2017/04/24に公開

C, C++, C#などC言語系の言語ばっかりやってきたが、ちょいと今流行りの機械学習を勉強しようと思い、Pythonを勉強した。C言語プログラマから見た特徴的な点を列挙する。

構文の特徴

  • ブロックコメントはなく、ラインコメントは#を使う。
  • エンコードルールcoding:を指定できる。
  • JavaDocのようなドキュメントストリングを標準サポートしている。
  • 制御ブロックは中括弧{}ではなく、インデントで表現する。(VBAみたいな?)

リテラルの特徴

桁数制限がなく、虚数を具備している等、全体的に数値計算用途に向いている。一方で、メモリの使用量が読めず、メモリがチープな組み込み環境には向いていない。(まぁ、そんな用途には使わないか・・・。)

  • 文字列及びバイト列リテラル
    • C言語とほぼ同じ。
  • 数値リテラル
    • 整数
      • 桁数制限のないint型の1種類だけ。
      • 2進数、8進数、10進数及び16進数で表現できる。
    • 浮動小数点数
      • 倍精度浮動小数点数の1種類だけ。単精度浮動小数点数はない。
    • 虚数
      • 整数または浮動小数点数の末尾にjをつけて虚数を表す。

プリミティブ型の特徴

プリミティブ型の種類が非常に豊富。JavaとかC言語では標準ライブラリのオブジェクト型で実装されているものが、Pythonではプリミティブ型で実装されている。プリミティブ型はオブジェクト型に比してコード量が少なく、見た目もきれいになるなどのメリットがある。一方で、プリミティブ型の書き方を覚えるまでは面倒というデメリットも・・・。

  • 数値型
    • 整数、浮動小数点数、複素数、ブール値がある。
    • ブール値のFalse, Trueの実体は、0, 1である。(C言語っぽい)
  • シーケンス型
    • 順序集合を表現するデータ型。文字列、リスト、タプル等の種類がある。種類の違いによって微妙に扱いが違う。
  • 集合型
    • 順序のない集合を表現するデータ型。集合、Frozen setの2種類がある。
  • マッピング型
    • 適当なインデックスでタグ付けされた順序のない集合。マッピング型に属するものは、辞書のみである。

制御構文の特徴

単純文が豊富。複合文はJavaと同等かな。

  • 単純文
    • 単純文とは単一行内に収められる文のこと。C言語だと、return, break, continue, etc... 等がある。
  • 複合文
    • if, while, for, try, with文等がある。

まとめ

C言語系やJavaだと、言語の型システムでは基本機能だけを提供して、標準ライブラリで便利なオブジェクト型やメソッドを提供する方針であった。それに対して、Pythonは言語の型システムにできる限りの便利な機能を詰め込み、生産性を向上させる工夫をしていた。

生産性は向上していたが、一方で互換性が心配。Python3はPython2と基本的に後方互換性がないらしいが、Python4?でも同じようなことがあると嫌だな・・・。

Discussion