lispとrubyとpythonと その2(python)

Python編。

Pythonのシンタックス自体はRubyよりサクサク書ける印象なんだけど、関数とかクラスを調べながら書くとなぜかRubyの方が楽な印象。
なんでだろ??
ヘルプとかリファレンスの差なんだろうか??

# -*- coding:utf-8 -*-

#文字列連結
s = "abc" + "あいうえお"
print s

#文字列の分割
import string
arr0 = string.split("あaあ,いiい,うuう,えeえ",",")

for e in arr0:
    print e

#正規表現でわけてもいい
import re
p = re.compile(",")
arr1 = p.split("あaあ,いiい,うuう,えeえ")

for e in arr1:
    print e

arr2 = re.split(u",",u"あaあ,いiい,うuう,えeえ")
for e in arr2:
    print e

#文字列の検索
#バイトで数えてんのか。。。
m =  re.search("かきくけこ","あいうえおかきくけこさしすせそ")
print str(m.start(0)) + "-" + str(m.end(0))

#findの方がいいかな?
print "あいうえおかきくけこさしすせそ".find("かきくけこ")

#部分文字列の取得
print u"あいうえおabdde"[5:]

#特定の文字の場所を探して部分文字列取得とかありがちじゃない?
target = "あいうえお-かきくけこ"
print target[target.find("-") + 1:]

#文字列比較
#普通の文字列比較
if "aaa" == "aaa":
    print "true"

#pythonでは==が同値性比較でisが同一性比較
if "aaa" == "aaa":
    print "1true"
else:
    print "1false"

if [1,2] is [1,2]:
    print "2true"
else:
    print "2false"

s1  = [1,2]
s2 = s1

if s1 is s2:
    print "3true"
else:
    print "3false"

#case-insensitiveな比較
#upperしてから比較
if "aaa".upper() == "Aaa".upper():
    print "true"

#数字→文字列
print str(123.0000)

#文字列→数値
i = int("123")
print str(i + 1)

f = float("123.000")
print str(f + 1)

#日付→文字列
#現在日付
import datetime
dt = datetime.datetime.now()
print("%s/%s/%s %s:%s:%s" % (dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second))

#strftimeでフォーマット
#細かい書式指定はこのへんに書いてある
#http://www.python.jp/doc/release/lib/module-time.html
print dt.strftime("%Y/%m/%d %H:%M:%S")

#文字列→日付
print datetime.datetime.strptime("2008/07/06 12:13:14","%Y/%m/%d %H:%M:%S").strftime("%Y-%m-%d %H-%M-%S")

#標準出力に出力
print "こんにちは"

import sys
sys.stdout.write("こんにちは 世界\n")

#標準入力から読み込み
#ここを参考にした
#http://python.g.hatena.ne.jp/mhrs/20060522/p2
#iterいいな・・・
# iter(o[, sentinel])
#     イテレータオブジェクトを返します。2 つ目の引数があるかどうかで、最初の引数の解釈は非常に異なります。
#2 つ目の引数がない場合、 o は反復プロトコル (__iter__() メソッド) か、シーケンス型プロトコル (引数が 0から開始する __getitem__() メソッド) をサポートする集合オブジェクトでなければなりません。
#これらのプロトコルが両方ともサポートされていない場合、TypeError が送出されます。
#2 つ目の引数 sentinel が与えられていれば、o は呼び出し可能なオブジェクトでなければなりません。
#この場合に生成されるイテレータは、next() を呼ぶ毎に o を引数無しで呼び出します。
#返された値が sentinel と等しければ、 StopIteration が送出されます。
#そうでない場合、戻り値がそのまま返されます。バージョン 2.2 で 新たに追加された仕様です。 #

for l in iter(sys.stdin.readline,""):
    print l.upper()

#コマンドライン引数の取得
#sys.argvに入ってる
#解析はgetoptで
for a in sys.argv:
    print a