Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

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例外が発生する

ネイティブデータ型 - Dive Into Python 3 日本語版

集合の計算

論理値で扱えるのが面白かった。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])

Pythonを学ぼう 第16回 セットの作成 - ほぷしぃ

内包表記

内包表記 - 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')] 

バイト文字列とUnicode文字列

PHP関係ないんだけど、よくまとまっていて面白いから、読んでおくといい。バイト列と文字列の違いが簡潔に説明されている。Pythonは2.x系のデフォルト文字エンコードはASCII、Python3はUTF-8だって。

文字列 - Dive Into Python 3 日本語版

コンピュータの世界においてテキスト(文字列)を表現するのは大変なことだ。

とりあえずこんだけ。

追記(2014/12/11 16.37)

こっち読もう。素晴らしくまとまってる。

Python初心者によるPythonのいいところ、はまりどころのまとめ - Webtech Walker