PythonとPHPを比較して面白いところを上げてみる
Python面白いです。個人的にこればっかり使いたいです。PHPはやっぱ中途半端感ある。色々と。
タプル・リスト・集合
PHPの配列ってデカイ。何でも配列に入れ込めるし、連想配列で全てが構成できる。PHP4の頃はクラスとかなかったからね、しょうがないね。
しかし、Pythonのように用途がしっかりと決まっている方が適材適所感があってすごくいい。Javaでもその辺厳密だけどさ。
面白いなーと思ったのがタプルという変更不可のオブジェクト配列の定義。リストよりも高速で使えるからDBの検索結果をループする時に便利そう。また、こんな感じで使える。
import os
(dirName, fileName) = os.path.split(__file__)
上記コードは現在のファイルからディレクトリパスとファイル名を取得できる。このタプルを返す設計すごくCool。便利だなと思った。関係ないけど、PHPで読み取り専用の配列作るの大変だもんね。え、foreachはコピーだから同じことだって? '`,、('∀`) '`,、
配列に指定された値がないと例外を投げる
a_list = ['a', 'b', 'new', 'mpilgrim', 'new'] a_list.index('c') # ValueError例外が発生する
集合の計算
論理値で扱えるのが面白かった。PHPではこうはいかないと思う。
a = set([1, 3, 5]) b = set([1, 5, 10]) #和集合(どっちかにある全ての要素を含む) #phpだとarray_merge→array_uniqueかな print(a | b) #set([1, 3, 5, 10]) #共通集合(両方の集合に含まれる要素のみ) #phpだとarray_intersect print(a & b) #set([1, 5]) #差集合(aにあってbにないものを返す) #phpだとarray_diff print(a - b) #set([3]) #対称差(どちらか一方にあるものだけを返す) print(a ^ b) #set([3])
内包表記
内包表記 - Dive Into Python 3 日本語版
phpのarray_walkに該当するのかな。おおまかに言うと。Pythonだとこんな感じで配列内の各要素に処理を与えることが出来る。この内包表記では、Pythonの全ての式が使えるそうだ。これは便利だねぇ。リストの操作がとても柔軟にできるのがPythonの特色のようだ。
a_list = [1,9,8,4] #新しいリストが作られる。a_listには影響がない。 print [elem * 2 for elem in a_list] #[2,19,16,8] #フィルタリングも出来る [f for f in glob.glob('*.py') if os.stat(f).st_size > 6000] #タプルの配列を作って返したりも [(os.stat(f).st_size, os.path.realpath(f)) for f in glob.glob('*.xml')]