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