1.Pythonとは

マスター

Pythonとは

Python(パイソン)は、汎用のプログラミング言語です。コードがシンプルで扱いやすく設計されており、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴があります。

文法を単純化することでコードの可読性を高め、読みやすく、書きやすくしてプログラマの作業性とコードの信頼性を高めることを重視してデザインされた、汎用の高水準言語です。

本体部分は必要最小限に抑えられています。一方で標準ライブラリやサードパーティ製のライブラリ、関数など、さまざまな領域に特化した豊富で大規模なツール群が用意されており、インターネット上から無料で入手可能で、自らの使用目的に応じて機能を拡張していくことができます。

またPythonは多くのハードウェアとOS (プラットフォーム) に対応しており、複数のプログラミングパラダイムに対応しており、オブジェクト指向、命令型、手続き型、関数型などの形式でプログラムを書くことができます。動的型付け言語であり、参照カウントベースの自動メモリ管理(ガベージコレクタ)を持っています。

これらの特性によりPythonは広い支持を獲得し、Webアプリケーションやデスクトップアプリケーションなどの開発はもとより、システム用の記述 (script) や、各種の自動処理、理工学や統計・解析など、幅広い領域における有力なプログラム言語になりました。プログラミング作業が容易で能率的であることは、ソフトウェア企業にとっては人員の節約、開発時間の短縮、ひいてはコスト削減に有益であることから、産業分野でも広く利用されています。

Pythonのリファレンス実装であるCPythonは、フリーかつオープンソースのソフトウェアであり、コミュニティベースの開発モデルを採用している。CPythonは、非営利団体であるPythonソフトウェア財団が管理している。その他の実装としては、PyPyやIronPythonなどが有名である。

Pythonは、オランダ人のグイド・ヴァンロッサムが開発したもので、名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』です。Pythonという英単語が意味する爬虫類のニシキヘビがPython言語のマスコットやアイコンとして使われています。

特徴

Pythonはインタプリタ上で実行することを前提に設計されていて、下記のような特徴があります。

  • 動的な型付け
  • ガベージコレクション
  • マルチパラダイム
  • モジュール、クラス、オブジェクト等の言語の要素が内部からアクセス可能
  • リフレクションを利用した記述が可能

動作する計算機環境 (platform)

Pythonの最初のバージョンはAmoeba上で開発されました。
のちに多くの計算機環境上で動作するようになった。

  • Windows, Windows CE(9x系およびNT系は最新版、Windows 3.1およびMS-DOSは旧版のみ)
  • Macintosh(Classic Mac OSおよびmacOSともに)
  • 各種UNIX
  • Linux(Linux Standard Base3.2で標準仕様となった)
  • Javaプラットフォーム (Jython)
  • .NET Frameworkプラットフォーム (IronPython)

など

Pythonには、読みやすく、それでいて効率もよいコードをなるべく簡単に書けるようにするという思想が浸透していて、Pythonコミュニティでも単純で短いコードをよしとする傾向が強いです。

Pythonの本体は、ユーザがいつも必要とする最小限の機能のみを提供するようにしており、基本機能以外の専門機能や拡張プログラムはインターネット上にライブラリとして提供されており、別途ダウンロードして保存し、必要なツールはこのツールキットからその都度呼び出して使用するという方式をとっています。

またPythonでは、Perlの「あることを行うのに1つ以上の方法がある」という哲学とは逆に、ある動作をさせる方法は、基本的に1通りしかないように作られている。そのためPythonのプログラムは、誰が書いてもだいたいどれも同じようなコードになり、作成者以外が見ても動作を把握しやすい。また、Pythonではプログラムの文書化(ソフトウェアドキュメンテーション)が重視されていて、言語の基本機能の一部になっています。

構文

インデントが意味を持つ「オフサイドルール」が特徴的である。

Pythonのコード:

def func(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)

わかりやすく整形されたC言語のコード:

int func(int x) {
    if (x == 0) {
        return 1;
    } else {
        return x * factorial(x - 1);
    }
}

Pythonではインデントを構文規則として強制することによって、ソースコードのスタイルがその書き手にかかわらずほぼ統一したものになり、その結果読みやすくなるという考え方が取り入れられています。

注意点:Python 2.xと3.xは違いがあります

Pythonは2020年5月現在、Python 3.8が最新バージョンです。そしてPython 2.xの最終バージョンは2.7です。
Python 2.xの最終バージョンである2.7はサポート期限は2020年1月1日まででした。
実はこのPython 2.xとPython 3.xでは一部互換性が失われており、構文も一部変更になっています。
全く異なるというわけではないのですが、Pythonを始めるときに「Python 2.xと3.xには違うところがある」ことを知っておく必要があります。
(サンプルコードなどを動かすときに元のコードがPython2.xなのかPython3.xなのか、自分の実行環境がPython2.xかPython3.xで動作が異なったり全く動かなかったりしてハマることがあるためです)

下記にPython2とPython3主な違いを

printが関数に

Python2

>>> print 'Hello'
Hello

Python3

>>> print('Hello')
Hello

keys, items, valuesメソッドはイテレート可能なオブジェクトを返します

Python2

>>> d = {"key1": "value1"}
>>> d.keys()
['key1']
>>> type(_)
<type 'list'>
>>> d.values()
['value1']
>>> d.items()
[('key1', 'value1')]

Python3

>>> d = {"key1": "value1"}
>>> d.keys()
<dict_keys object at 0x7f0da5268e18>
>>> type(_)
<class 'dict_keys'>
>>> d.values()
<dict_values object at 0x7f0da5268e18>
>>> d.items()
<dict_items object at 0x7f0da3a44638>

文字列の標準がUnicodeになり型がstr

これによって以前までのユニコードテキストのリテラルu”…”は使用できなくなりました。

Python2

>>> u"unicode"
u'unicode'

Python3

>>> u"unicode"
File "<stdin>", line 1
u"unicode"
^
SyntaxError: invalid syntax

xrangeがrangeに

Python2

>>> iter_check = lambda obj : hasattr(obj, '__iter__') and hasattr(obj, '__next__')
>>> isIterable = lambda obj : hasattr(obj, '__iter__')
>>> type(range(1,10))
<type 'list'>
>>> type(xrange(1,10))
<type 'xrange'>
>>> iter_check(xrange(1,10))
False
>>> isIterable(xrange(1,10))
True

Python3

>>> type(range(1,10))
<class 'range'>
>>> type(iter(range(1,10)))
<class 'range_iterator'>
>>> xrange(1,10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined

 

他にも違いはありますが、まずはこの辺りを覚えておけば殆ど支障はないと思います。

詳細を知りたい方はWhat’s New in Python3.0のほうをお読みください。

 

コメント