こんにちは。
入社三年目のG.Hです。

私は以前、業務でJavaを用いた開発経験がありますが、
Pythonにも興味を持ったため、先日外部のPython研修に参加してきました。

今回は、その研修で学んだことや個人的に使用してみた感想を踏まえ、
Javaと比較して良いと感じたPythonの特徴を紹介します。

本記事では以下の内容についてご紹介します。

  • ブロックはインデント
  • Pythonは動的型付け言語
  • シンタックスシュガーは好まれない
  • パッケージ管理ツール
  • Pythonのパッケージを一部紹介
  • プロジェクトごとに隔離された仮想環境

「まだPythonは使用したことがない」という方に、
Pythonは使いやすい言語だと感じていただけたら幸いです。

ブロックはインデント

Javaは{}でブロック(コードの集まり)を表現しますが、
Pythonはインデントでブロックを表現します。

Pythonのインデントは、半角スペース四文字と決まっており、
誰が書いても自然と同じようなコードになるため、コードが読みやすいです。  

※構文に関する注意点

基本的にタブはインデントには使いません。
理由は、タブの幅は環境によって異なるため、コードが違って見えてしまうからです。
文末にセミコロンも必要ありません。

以下は、JavaとPythonで同じことを実行するサンプルコードです。  

Javaの場合

class Sample {
    public static void main(String[] args){
        int i = 5;
        if( i == 5){
            System.out.println("iは5");
        } else {
            System.out.println("iは5じゃない");
        }
    }
}

 

Pythonの場合

i = 5

if i == 5:
    print("iは5")
else:
    print("iは5じゃない")

Pythonが、シンプルで読みやすいことが分かると思います。

ちなみにPythonはスクリプト言語なので、
Javaみたいにjavac [ファイル名]のようにコンパイルせず、そのまま実行できます。

 

Pythonは動的型付け言語

Pythonは動的型付け言語なので、
Javaと違って明示的に型を宣言しなくても、変数を利用することができます。  

Javaの場合

int i = 5;
String str = "Hello World";

 

Pythonの場合

i = 5
str = "Hello World"

 

※動的型付け言語について

メリット : 柔軟性がある
デメリット: 型に関係する潜在的なバグが存在しやすい

デメリットへの対策として、
組み込み関数のtype()を使い、変数の型を取得し、確認することができます。

シンタックスシュガーは好まれない

Pythonはシンタックスシュガーが好まれないです。

シンタックスシュガーが好まれない理由は、
やり方は一つ、というPythonの思想の一部からきていると思われます。

以下リンクの「The Zen of Python」はPythonプログラマが持つべき思想を示したものです。
https://www.python.org/dev/peps/pep-0020/  

「The Zen of Python」は、Pythonのインストールが済んでいれば、
インタラクティブシェルを起動して、import thisと入力すると確認することができます。

そういった理由からか、Pythonには変数に1を足す++(インクリメント)や、
変数から1を引く--(デクリメント)が存在しません。

同様に、do while、switch文などもPythonには存在しません。
例:do while →while、switch → if-elseで代替可能

※シンタックスシュガーとは?

既存の構文などを、別の構文や記法で記述できるようにしたもの。

パッケージ管理ツール

Javaは、パッケージ管理にMavenなどをインストールする必要があります。
Pythonには、pipというパッケージ管理ツールが同封されています。
そのため、Pythonのインストールが済んでいれば最初から利用可能です。

pipは、以下のコマンドをWindowsはコマンドプロンプトで、
Macはターミナルで実行するだけで、
簡単にパッケージやフレームワークをインストールすることができます。

pip install [パッケージ名]

Pythonのパッケージ例

Pythonのパッケージを一部ご紹介します。

OpenCV 画像処理・画像解析
NumPy 数値計算を効率的に行う
matplotlib グラフ表示
Django Webアプリケーションフレームワーク

今回はOpenCVを使用して画像の表示を行います。
Windowsはコマンドプロンプトで、Macはターミナルで、
以下のコマンドを実行して、簡単にOpenCVをインストールすることができます。

pip install opencv-python

インストールできたら、OpenCVをimportして、
以下のような短いコードで画像を表示することができます。  

import cv2

# 画像ファイルを読み込む
img = cv2.imread('python.jpg')
# 画像をウィンドウ上に表示する
cv2.imshow("img", img)
# 0 を指定した時は、何かしらのキーを打つまでキー入力を待つ
cv2.waitKey(0)
# ウィンドウを閉じる
cv2.destroyWindow("img")

 

コードを書いたら、.py拡張子をつけて保存します。
ターミナルでカレントディレクトリに移動するとpython [ファイル名]で実行することができます。
Pythonはスクリプト言語なので、コンパイルの必要がなく、実行することができます。

実行結果

Pythonは、パッケージ管理ツールを用いたプログラムの記述が簡単にできる
ということが分かると思います。

 

プロジェクトごとに隔離された仮想環境

Pythonには、venvというプロジェクトごとに隔離された仮想環境を作成するツールが存在します。
こちらもPythonがインストールされていれば、利用することができます。

venvを使うことで、プロジェクトごとにパッケージをインストールしたり、
異なるバージョンのパッケージを利用したりすることが可能になります。

仮想環境は、python -m venv [仮想環境名] で作成可能です。
上記コマンドをWindowsはコマンドプロンプト、Macはターミナルにて実行すると、仮想環境のディレクトリが作成されます。
その中に、pipでパッケージをインストールして利用します。
必要なくなった仮想環境を削除したい場合は、ディレクトリごと削除すればOKです。

実行例

コマンド実行前のディレクトリ

testという名前の仮想環境を作成。
コマンドを実行するとディレクトリが作成される。

 

※仮想環境作成ツールの注意点

venvの他に、virtualenv、pyvenvなども存在しますが、
Python3.5からvenvが推奨されているため、venvを紹介しました。

詳しくは以下をご参照ください。
https://docs.python.org/ja/3/library/venv.html

 

まとめ

Pythonはシンプルで使いやすい、様々なライブラリが充実している、
といった点が特徴だなと研修で再認識しました。
近年、ディープラーニングやデータ解析、webアプリといった幅広い分野で利用されているのは、
そのような特徴を多くの人が良いと感じていることも、理由の一つではないかと考えます。

まだ利用したことがない方に、Pythonは使いやすい言語だと感じていただけたら幸いです。

最後までお読みいただきありがとうございました。

G.H
CSVIT事業部 G.H
ユーザーやベンダーと協力しながら、プロジェクトマネジメントシステムにデータの入力を行うアプリを、CELFというクラウドサービスを用いて作成しています。