差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
python:introduction [2020/03/08 12:02] – [変数型] watalupython:introduction [2020/03/08 17:08] (現在) – [Python 3を使いましょう] watalu
行 3: 行 3:
 === Pythonはインタプリタ === === Pythonはインタプリタ ===
  
-次の5行は、Pythonで書いたHello World!です。+次の5行は、Pythonで書いたHelloWorld!です。
  
 <code> <code>
 def main(): def main():
-    print("Hello World!")+    print("HelloWorld!")
  
 if __name__ == "__main__": if __name__ == "__main__":
行 22: 行 22:
 Python言語で書かれたプログラムの実行には必ず、pythonというコマンドを介する必要があります。これはPython言語のインタプリタ(処理系)です。 Python言語で書かれたプログラムの実行には必ず、pythonというコマンドを介する必要があります。これはPython言語のインタプリタ(処理系)です。
  
 +=== Python 3を使いましょう ===
 +
 +Python言語は大きく4世代に分類できます。
 +
 +  * バージョン0: 1991年に0.9.0が公開された
 +  * バージョン1: 1994年にリリースされたバージョン
 +  * バージョン2: 2000年にリリースされて以来、もっとも永く使われていたバージョン
 +  * バージョン3: 2008年にリリースされ、2018年あたりからやっと標準となった印象があるバージョン
 +
 +バージョン2の開発中に様々な拡張が行われたようです。そして[[https://en.wikipedia.org/wiki/History_of_Python|History of PythonというWikipedia上の記事]]にもあるように、バージョン3の仕様は、バージョン2との後方互換性を捨てて定められました。[[https://docs.python.org/3/whatsnew/3.0.html|これだけの変更]]が行われたため、Python 2を使い続けた人が多かったのも頷けます。[[https://docs.python.org/3/howto/pyporting.html|Porting Python 2 Code to Python 3]]は、もはや移植に近い内容な気がします。
 +
 +そのため、Python言語は2種類ある、と言えます。
 +
 +バージョン2のために書かれた多くのライブラリやソースコードは、バージョン3では動きません。しかし、多くのユーザはバージョン2を使い続け、教科書や教育内容、また多くのモジュールやパッケージもバージョン2を支持し続けつつ、バージョン3の開発も進めてきました。開発リソースの分割が原因で、バージョン3への移行はかなり遅れたようにも思います。
 +
 +  * NumPyは[[https://numpy.org/devdocs/release/1.16.6-notes.html?highlight=release%20notes%20python|0.16]]までPython 2.7とPython 3をサポートしていましたが、[[https://numpy.org/devdocs/release/1.17.0-notes.html?highlight=release%20notes%20python|0.17.0]]からPython 3のみのサポートとなりました。これは[[https://numpy.org/neps/nep-0014-dropping-python2.7-proposal.html|2017年に決定された]]そうです。
 +  * 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文が異なるので、すぐにわかるはずです。
 +
 +<code>
 +# Python 2のprint文
 +print "Hello, World!"
 +# Python 3のprint文
 +print("Hello, World!")
 +</code>
 +
 +そう、昔はprintは文で、関数ではなかったのです。
 === Python本体と標準ライブラリとサードパーティライブラリ === === Python本体と標準ライブラリとサードパーティライブラリ ===
  
行 90: 行 120:
 dict dict
 </code> </code>
- 
  
 == 配列 == == 配列 ==
行 100: 行 129:
 タプルは更新不可能な配列です。 タプルは更新不可能な配列です。
 辞書はPerlの連想配列と似ていますが、数値と文字列を区別するキーを持ちます。 辞書はPerlの連想配列と似ていますが、数値と文字列を区別するキーを持ちます。
 +
 +== スライシング ==
 +
 +
  
 == 条件分岐 == == 条件分岐 ==
  
 <code> <code>
 +if 条件:
 +    実行文1
 +</code>
  
 +<code>
 +if 条件1:
 +    実行文1
 +elif 条件2:
 +    実行文2
 +</code>
 +
 +<code>
 +if 条件:
 +    実行文1
 +else:
 +    実行文2
 +</code>
 +
 +<code>
 +if 条件1:
 +    実行文1
 +elif 条件2:
 +    実行文2
 +else:
 +    実行文3
 </code> </code>
  
行 110: 行 167:
  
 <code> <code>
 +for 変数 in 範囲:
 +    実行文1
 +</code>
  
 +<code>
 +while 条件:
 +    実行文1
 </code> </code>
 +
 +抜けるのは break
  
 == 内包表記 == == 内包表記 ==
  
 +リスト、タプル、辞書などから、新しいリストや辞書を作る Python 独自の記法
 +
 +リストの内包表記
 <code> <code>
 +[式 for 変数 in イテレート可能なオブジェクト]
 +</code>
 +はif条件文も使える。
 +<code>
 +[式 for 変数 in イテレート可能なオブジェクト if 条件式]
 +</code>
  
 +ネストも可能。
 +<code>
 +[式 for 変数名1 in イテラブルオブジェクト1
 +    for 変数名2 in イテラブルオブジェクト2
 +        for 変数名3 in イテラブルオブジェクト3]
 </code> </code>
 +
 +集合の内包表記
 +<code>
 +{値 for 変数 in イテレート可能なオブジェクト}
 +</code>
 +はif条件文は使えない。
 +
 +
 +辞書の内包表記
 +<code>
 +{キー:値 for 変数 in イテレート可能なオブジェクト}
 +</code>
 +はif条件文は使えない。
  
 == zipとenumerate == == zipとenumerate ==
 +
 +zipは、2次元配列がないPythonならではの機能で、長さの同じイテラブルを組み合わせることができる。
  
 <code> <code>
 +keys = ['k1', 'k2', 'k3']
 +values = [1, 2, 3]
  
 +{k: v for k, v in zip(keys, values)}
 </code> </code>
  
 +enumerateも同様。
 +
 +<code>
 +l_str1 = ['a', 'b', 'c']
 +l_str2 = ['x', 'y', 'z']
 +
 +l_zip = [(s1, s2) for s1, s2 in zip(l_str1, l_str2)]
 +print(l_zip)
 +# [('a', 'x'), ('b', 'y'), ('c', 'z')]
 +source: list_comprehension.py
 +l_zip = []
 +for s1, s2 in zip(l_str1, l_str2):
 +    l_zip.append((s1, s2))
 +
 +print(l_zip)
 +# [('a', 'x'), ('b', 'y'), ('c', 'z')]
 +source: list_comprehension.py
 +enumerate()の例。
 +
 +l_enu = [(i, s) for i, s in enumerate(l_str1)]
 +print(l_enu)
 +# [(0, 'a'), (1, 'b'), (2, 'c')]
 +</code>
 +
 +== ジェネレータ式 ==
 +
 +
 +== ラムダ式 ==
  
 === 標準ライブラリの例 === === 標準ライブラリの例 ===