差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
python:introduction [2020/03/08 12:23] – [ループ] watalu | python:introduction [2020/03/08 17:08] (現在) – [Python 3を使いましょう] watalu | ||
---|---|---|---|
行 3: | 行 3: | ||
=== Pythonはインタプリタ === | === Pythonはインタプリタ === | ||
- | 次の5行は、Pythonで書いたHello World!です。 | + | 次の5行は、Pythonで書いたHello, World!です。 |
< | < | ||
def main(): | def main(): | ||
- | print(" | + | print(" |
if __name__ == " | if __name__ == " | ||
行 22: | 行 22: | ||
Python言語で書かれたプログラムの実行には必ず、pythonというコマンドを介する必要があります。これはPython言語のインタプリタ(処理系)です。 | Python言語で書かれたプログラムの実行には必ず、pythonというコマンドを介する必要があります。これはPython言語のインタプリタ(処理系)です。 | ||
+ | === Python 3を使いましょう === | ||
+ | |||
+ | Python言語は大きく4世代に分類できます。 | ||
+ | |||
+ | * バージョン0: | ||
+ | * バージョン1: | ||
+ | * バージョン2: | ||
+ | * バージョン3: | ||
+ | |||
+ | バージョン2の開発中に様々な拡張が行われたようです。そして[[https:// | ||
+ | |||
+ | そのため、Python言語は2種類ある、と言えます。 | ||
+ | |||
+ | バージョン2のために書かれた多くのライブラリやソースコードは、バージョン3では動きません。しかし、多くのユーザはバージョン2を使い続け、教科書や教育内容、また多くのモジュールやパッケージもバージョン2を支持し続けつつ、バージョン3の開発も進めてきました。開発リソースの分割が原因で、バージョン3への移行はかなり遅れたようにも思います。 | ||
+ | |||
+ | * NumPyは[[https:// | ||
+ | * TensorFlowは2017年2月に公開されたバージョン1、2019年9月に公開されたバージョン2、いずれもPython 2をサポートしています。 | ||
+ | * Scikit-learnは2019年3月まで開発が続いたバージョン0.20までPython 2.7と3.4をサポートしていましたが、2019年5月に公開されたバージョン0.21以降はPython 3.5以降のみをサポートしています。 | ||
+ | * Anacondaは今でも、Python 2と3それぞれのディストリビューションを提供しています。 | ||
+ | |||
+ | データサイエンスや機械学習を目的にPythonを新たに学ぶ人は、2020年以降はPython 2を学ぶ必要はなく、Python 3を学ぶのが良さそうです。テキストもPython 3に対応したものだけを探して大丈夫です。手に取った本がどちらのバージョンに対応しているかは、Python 2と3とでprint文が異なるので、すぐにわかるはずです。 | ||
+ | |||
+ | < | ||
+ | # Python 2のprint文 | ||
+ | print " | ||
+ | # Python 3のprint文 | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | そう、昔はprintは文で、関数ではなかったのです。 | ||
=== Python本体と標準ライブラリとサードパーティライブラリ === | === Python本体と標準ライブラリとサードパーティライブラリ === | ||
行 90: | 行 120: | ||
dict | dict | ||
</ | </ | ||
- | |||
== 配列 == | == 配列 == | ||
行 100: | 行 129: | ||
タプルは更新不可能な配列です。 | タプルは更新不可能な配列です。 | ||
辞書はPerlの連想配列と似ていますが、数値と文字列を区別するキーを持ちます。 | 辞書はPerlの連想配列と似ていますが、数値と文字列を区別するキーを持ちます。 | ||
+ | |||
+ | == スライシング == | ||
+ | |||
+ | |||
== 条件分岐 == | == 条件分岐 == | ||
行 147: | 行 180: | ||
== 内包表記 == | == 内包表記 == | ||
+ | リスト、タプル、辞書などから、新しいリストや辞書を作る Python 独自の記法 | ||
+ | |||
+ | リストの内包表記 | ||
< | < | ||
+ | [式 for 変数 in イテレート可能なオブジェクト] | ||
+ | </ | ||
+ | はif条件文も使える。 | ||
+ | < | ||
+ | [式 for 変数 in イテレート可能なオブジェクト if 条件式] | ||
+ | </ | ||
+ | ネストも可能。 | ||
+ | < | ||
+ | [式 for 変数名1 in イテラブルオブジェクト1 | ||
+ | for 変数名2 in イテラブルオブジェクト2 | ||
+ | for 変数名3 in イテラブルオブジェクト3] | ||
</ | </ | ||
+ | |||
+ | 集合の内包表記 | ||
+ | < | ||
+ | {値 for 変数 in イテレート可能なオブジェクト} | ||
+ | </ | ||
+ | はif条件文は使えない。 | ||
+ | |||
+ | |||
+ | 辞書の内包表記 | ||
+ | < | ||
+ | {キー:値 for 変数 in イテレート可能なオブジェクト} | ||
+ | </ | ||
+ | はif条件文は使えない。 | ||
== zipとenumerate == | == zipとenumerate == | ||
+ | |||
+ | zipは、2次元配列がないPythonならではの機能で、長さの同じイテラブルを組み合わせることができる。 | ||
< | < | ||
+ | keys = [' | ||
+ | values = [1, 2, 3] | ||
+ | {k: v for k, v in zip(keys, values)} | ||
</ | </ | ||
+ | enumerateも同様。 | ||
+ | |||
+ | < | ||
+ | l_str1 = [' | ||
+ | l_str2 = [' | ||
+ | |||
+ | l_zip = [(s1, s2) for s1, s2 in zip(l_str1, l_str2)] | ||
+ | print(l_zip) | ||
+ | # [(' | ||
+ | source: list_comprehension.py | ||
+ | l_zip = [] | ||
+ | for s1, s2 in zip(l_str1, l_str2): | ||
+ | l_zip.append((s1, | ||
+ | |||
+ | print(l_zip) | ||
+ | # [(' | ||
+ | source: list_comprehension.py | ||
+ | enumerate()の例。 | ||
+ | |||
+ | l_enu = [(i, s) for i, s in enumerate(l_str1)] | ||
+ | print(l_enu) | ||
+ | # [(0, ' | ||
+ | </ | ||
+ | |||
+ | == ジェネレータ式 == | ||
+ | |||
+ | |||
+ | == ラムダ式 == | ||
=== 標準ライブラリの例 === | === 標準ライブラリの例 === |