見出し画像

Python3 基礎文法 から学ぶ使い方*基礎編

すでにWindows環境にPythonが実行できる状態を前提とした基礎を自分用にまとめました。

環境構築はこちらを参照ください。

AnacondaでPython環境を構築する for Windows10
https://note.mu/mc_kurita/n/n17681edd4a12

まずPythonとは

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

Python の特徴

Pythonはインタプリタ上で実行することを前提に設計している。以下の特徴をもっている

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

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

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

・Windows, Windows CE(9x系およびNT系は最新版、Windows 3.1およびMS-DOSは旧版のみ)
・Macintosh(Classic Mac OSおよびmacOSともに)
・iOS Pythonista for iOS(omz:software)
・Android Pydroid3 for Android (IIEC)
・各種UNIX
・Linux(Linux Standard Base3.2で標準仕様となった)
・Plan 9(Python 3.xは未移植)
・PalmOS
・S60
・Javaプラットフォーム (Jython)
・.NET Frameworkプラットフォーム (IronPython)

ライセンス

Python のリリースは全てオープンソースであり、PSF (Python Software Foundationライセンス)として配布されている。これはGPL互換であるが、GPLと異なり、変更したバージョンを配布する際に変更をオープンソースにしなくてもよい。

Python 2.x

2000年に公開。ガベージコレクションやUnicode、リストを導入した。一躍メジャーな言語となった。多くの機能はHaskellを参考にして導入している。

2.6以降のバージョンには、2.xから3.xへの移植を助ける「2to3 ツール」と「lib2to3 モジュール」を含んでいる[5]。2.xのサポートは2020年までとされている。

Python 3.x

2008年、長い試験期間を経てPython 3.0が公開された。 開発初期には、西暦3000年に公開予定の理想のPythonとして、Python 3000と呼んでいた。Py3Kと略すこともある。

しかし2.xとの後方互換性が損なわれている。当初は2.xに比べて3.xが利用できるライブラリ等が著しく少ないという問題点があったが、Djangoなど徐々に3.xに対応したフレームワークやライブラリなどが増えていったこともあり、2016年時点においては新規のプロジェクトについて3.xで開発することが多くなっている。

2015年11月にリリースされたFedora 23[9]や2016年4月にリリースされたUbuntu 16.04 LTSでは、デフォルトでインストールされるPythonのバージョンが2.xから3.xに変更されている。

Pythonの構文

インデント(「オフサイドルール」)が特徴的である。以下に、階乗を題材にC言語と比較した例を示す。

Pythonのコード:

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

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

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

Pythonと整形されたC言語とでは、プログラムコードの間に違いがほとんど見られない。しかし、C言語のインデントはルール(構文規則上のもの)ではなく、単なるコンベンション(コーディングスタイル)でしかない。そのためC言語では全く同じプログラムを以下のように書くこともできる。

わかりにくいC:

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

Pythonではインデントは構文規則として決められているため、こうした書き方は不可能である。Pythonではこのような強制を課すことによって、プログラムのスタイルがその書き手にかかわらずほぼ統一したものになり、その結果読みやすくなるという考え方が取り入れられている。これについては賛否両論があり、批判的立場の人々からは、これはプログラマがスタイルを選ぶ自由を制限するものだ、という意見も出されている。

インデントによる整形は、単に「見かけ」だけではなく品質そのものにも関係する。例として次のコードを示す。

間違えたC:

if (x > 10)
   x = 10;
   y = 0;

このコードはC言語の構文規則上は問題無いが、インデントによる見かけのifの範囲と、言語仕様によるifの実際の範囲とが異なっているため、プログラマの意図が曖昧になる。この曖昧さは、検知しにくいバグを生む原因になる。

ソースコードを読む際、多くの人はインデントのような空白によって明確に整列されたコードを目安として読み、コンパイラのように構文解析しながらソースを読むものではない。その結果、一見しただけでは原因を見つけられないバグを作成する危険がある。

Pythonではインデントをルールとすることにより、人間が目視するソースコードの理解とコンパイラの構文解析の間の誤差を少なくすることで、より正確に意図した通りにコーディングすることができると主張されている。

データ型

Pythonのデータは動的に型付けされる。値自身が型を持っており、変数はすべて値への参照である。

基本的なデータ型として、整数型・多倍長整数型・浮動小数点数型・複素数型・文字列型・Unicode文字列型・論理型、そして関数型がある。多倍長整数型は(メモリの許す限り)無制限の桁数で整数計算が可能である。

さらに組み込みのコンテナ型として、リスト型、タプル型、辞書型(連想配列)のほか、値の重複を許さない集合型(Python 2.3以降)がある。

Python 3.x以降では、整数型が多倍長整数型と統合され、従来の文字列型とUnicode文字列型に代わり、バイト列型と文字列型が導入された。

オブジェクト指向プログラミング

Pythonでは扱えるデータの全てがオブジェクトである。単純な数値といった基本的なデータ型をはじめ、組み込みのコンテナ型、組み込み関数など、これらは全て統一的な継承関係をもつオブジェクトであり「型」をもっている。これらの組み込み型とユーザ定義型は区別されず、組み込み型を継承したクラスを定義できる。上の「データ型」の項で述べたように Pythonは静的な型チェックを持たないため、Javaのようなインターフェイスという言語上の仕組みは必要とされない。

ライブラリ

Pythonには「電池が付属しています("Battery Included")」の思想があり、プログラマがすぐに使えるようなライブラリや統合環境をあらかじめディストリビューションに含めるようにしている。このため標準ライブラリは非常に充実している。

Python 標準ライブラリ — Python 3.7.2 ドキュメント
https://docs.python.org/ja/3/library/index.html

ライブラリの詳細は公式を参照ください。

Webのお仕事、元phpプログラマ、今主にWebディレクタ、たまにエンジニア、UXディレクタ、LTのネタ探ししてます。