こんにちは。
入社三年目の具志堅です。
 
 
私は以前、業務で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は使いやすい言語だと感じていただけたら幸いです。
 
 
最後までお読みいただきありがとうございました。

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