pythonを勉強中 vol.7

今日もPythonを勉強。

基本的な事しかしてませんが・・・

知識に成れば良い!

ってことで、

前回やったリストなんかと同じ「オブジェクトの集合」の

「タプル」

これって本を読んでると、

ん?

リストがあるから要らなくね?

って思ってたのが大間違い。。。

不変性ようは変更不能です。

これ大事っすね。

後は、

メソッドがない。

しかしシーケンスオブジェクトなので、
下記のような操作は出来る。

>>> (1,2)+(3,4)
(1, 2, 3, 4)

>>> (1,2)*4
(1, 2, 1, 2, 1, 2, 1, 2)

>>> x = (1,2,3,4,5)
>>> len(x)
5

しかし、

>>> y = [1,2,3,4,5]
>>> y.reverse()
>>> y
[5, 4, 3, 2, 1]

こういうのは出来ないので、

>>> x.reverse()
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘tuple’ object has no attribute ‘reverse’

って怒られる。

なので、

一度タプルをリストに変換してから、
ソートやリバースする。

>>> l =list(x)
>>> l.sort()
>>> l
[1, 2, 3, 4, 5]
>>> l.reverse()
>>> l
[5, 4, 3, 2, 1]

それからタプルに変換する。

>>> t = tuple(l)
>>> t
(5, 4, 3, 2, 1)

おぉ〜戻ったっす。

後はタプルで大事そうな事が書いてあった。

リストはディクショナリのキーになれないが、
タプルはなれる。

これも覚えておかないとなぁ〜。

pythonを勉強中 vol.6

オブジェクトの集合のリスト

これもかなり頻繁に使うものだなぁ〜。

Pythonの基礎からで無く、

いきなりDjangoをやっているから

細かい事が解っていないと思うので

これも勉強しておく事にする。

リストとは

オブジェクトを一定の順序で並べたもの

と「初めてのPython」にも書かれている。

つまり左から右へ一定の順序で並べられたオブジェクトの集合。

二次元配列(リストのネスト)も作れる。

例えば通常リストを書くと下記のようになる。

>>> x = [1,2,3]

二次元配列で書く場合は下記になる。

>>> y = [[1,2,3],[4,5,6],[7,8,9]]

ふむふむ。

長さも確認してみる。

>>> len(x)
3

>>> len(y)
3

連結もしてみる。

>>> z = x + y
>>> z
[1, 2, 3, [1, 2, 3], [4, 5, 6], [7, 8, 9]]

今度はインデックス指定

>>> z[0]
1
>>> z[4]
[4, 5, 6]

スライシングで変更してみる。

>>> z[0:4]=’hoge’
>>> z
[‘h’, ‘o’, ‘g’, ‘e’, [4, 5, 6], [7, 8, 9]]
>>> z[0:4]=[‘hoge’,’hige’]
>>> z
[‘hoge’, ‘hige’, ‘hoge’, [7, 8, 9]]

次はソートしてみる。

>>> z.sort()
>>> z
[[7, 8, 9], ‘hige’, ‘hoge’, ‘hoge’]

リストに1つだけオブジェクトを追加する。

>>> z.append(‘more’)
>>> z
[[7, 8, 9], ‘hige’, ‘hoge’, ‘hoge’, ‘more’]

末尾に要素を削除する。

>>> z.pop()
‘more’
>>> z.pop()
‘hoge’

末尾に要素を追加する。

>>> z.extend([1,2,3])
>>> z
[[7, 8, 9], ‘hige’, ‘hoge’, 1, 2, 3]

要素の順書を逆転させる。

>>> z.reverse()
>>> z
[3, 2, 1, ‘hoge’, ‘hige’, [7, 8, 9]]

特定の要素の削除

>>> del z[0]
>>> z
[2, 1, ‘hoge’, ‘hige’, [7, 8, 9]]

こう実際に試しているとPythonっていいなぁ〜って

思えてくる。

組み込みの関数がデフォルト充実しているなぁ〜。

今度はDjangoでは無く、

Pythonでテンプレートエンジンを使って、

何か軽く作ってみたいな。

初めてのPython 第2版
オライリージャパン(2004-11)

  • (著)マーク ルッツ
  • (著)デイビッド アスカー
  • (原著)Mark Lutz
  • (原著)David Ascher
  • (翻訳)夏目 大

オライリージャパン
新品価格:¥ 5,040
中古価格:¥ 4,100
ASIN:4873112109

pythonを勉強中 vol.5

昨日は子供が怪我をしてしまい、

午後8時くらいから看病をしながら、

一緒に寝てました。

本当は寝付いたら、

起きて勉強したりするはずだったのに

起きたら朝6時だったorz

ビックリ!ってか起こしてよ。。。

そんなこんなで、

Pythonを勉強中vol.5

今日は

raise

をやってみる。

こいつの役割は、

初めてのPython」を見てみると

プログラムの中で例外を故意に発生させる場合に使用する

ってな事が書いてある。

書き方が下記の通り

・ raise name
・ raise name, data
・ raise

実際にやってみる。

>>> try:
…   raise IndexError, ‘hoge’
… except IndexError:
…   print ‘index error’
…   raise

index error
Traceback (most recent call last):
File “”, line 2, in
IndexError: hoge

raiseで何も指定しない場合は、

直近(この場合では、raise IndexError, ‘hoge’)の例外を

発生させる事が出来る。

よってexceptブロックで捕まえているが、

そこの例外を処理していないのが解った。

その場合、raise IndexError, ‘hoge’

指定したデータ「hoge」が渡されているのも解った。

なるほどね。

raise」以外にも「assert」も例外を故意に発生させるらしいので、一緒にやってみた。

書き方は下記の通り

assert test, data

これは、「raise」を使用した場合の下記と同じである。

if __debug__:
 if not test:
  raise AssertionError,

ん?
これはつまり if で test がFalseの場合にAssertionErrorって事かな?
なるほど。

こんな感じ

>>> x = 2
>>> assert x < 1, ‘x must be negative’
Traceback (most recent call last):
File “”, line 1, in
AssertionError: x must be negative

AssertionError: x must be negativeになってる。

ほぉ〜。
つまりxは2であり、1よりも大きいため例外処理の対象となっている。

assertは、

プログラマが自ら定めた条件が満たされているかを確かめるためのもの

らしいっす。

まぁ〜確かにタイプミスとかは自動的に検出されるから、

別にassertで例外処理をする必要もないもんね。

初めてのPython 第2版
オライリージャパン(2004-11)

  • (著)マーク ルッツ
  • (著)デイビッド アスカー
  • (原著)Mark Lutz
  • (原著)David Ascher
  • (翻訳)夏目 大

オライリージャパン
新品価格:¥ 5,040
中古価格:¥ 4,100
ASIN:4873112109

遂に発売されたっす「KING OF STAGE VOL.7 メイドインジャパン at 日本武道館」」

出ましたねぇ〜。

「KING OF STAGE VOL.7 メイドインジャパン at 日本武道館」

昔からRHTMESTER好きなので、

速攻買ってやりましたw

ただね高い。。。

6000円ってオライリーが1冊買えるじゃないですか?

でもアマゾンで買えば、1556円も安くなりますねw

うれしい♪

KING OF STAGE Vol.7~メイドインジャパン at 日本武道館~
キューンレコード

  • (俳優)RHYMESTER
  • (俳優)RYO-Z,KREVA,CUEZERO,CHANNEL,KOHEI JAPAN,SU,LITTLE,ILMARI,SONOMI,PES,K.I.N,童子-T MCU
  • (俳優)SOUL SCREAM

キューンレコード(2007-12-05)
新品価格:¥ 4,429
ASIN:B000WPD2T4

Pythonを勉強中 vol.4

いや〜Lingrが繋がらない。。。

さて今日もPythonをやります。

今日は「try catch」です。

みんなのPythonには掲載されていなかったので、

以前yoshukiさんに頂いた「初めてのPython」を参考にしました。

これは例外処理なんかに使われる。

PHPにもありますね。

try、throw、catch

これは4には無く、5から追加された予約語っす。

Pythonでは、

try、except、else、finaly

っすね。

基本は、

try:
 action()
except NameError:
 …..
except TypeError:
 …..
except:
 …..
else:
 …..

こんな感じらしい。
※初めてのPythonから引用っす。

気をつける事は、

elseの解釈と例外名を指定しないexceptですね。

簡単に自分の中で解釈すると、

まずは、例外が発生しなかった場合

1. tryでaction()を実行

2. 例外が発生しないので、elseを実行

次に指定した例外以外の例外が発生した場合

1. tryでaction()を実行

2. exceptを実行

※この場合elseは実行されない

最後にNameErrorが発生した場合

1. tryでaction()を実行

2. except NameErrorを実行

こんな感じかな?

elseはtryブロックの中に書くという方法もあるみたい
こんな感じ

try:
 action()
 # ここへelseの場合の処理を記述
except NameError:
 …..
except TypeError:
 …..
except:
 …..

なるほどなぁ〜。

実際にやってみる。

>>> def type(x, y):
…   print x + y

>>> try:
…    type([0,1,2], “hoge”)
…  except NameError:
…    print “NameError”
…  except TypeError:
…    print “TypeError”
…  else:
…    print “Complete”


TypeError

TypeErrorが発生されたので、
例外名TypeErrorを実行した。

exceptには4つ書き方があるみたい。

・except 例外名:
・except 例外名, value:
・except (例外名, 例外名):
・except (例外名, 例外名), value:

後は、finally
こいつはいわゆる「後処理」に使用されるみたい。

例えば、
ファイルを扱う処理の場合に必ずファイルをクローズするなど。

確かに必要。

このtryでの例外処理と一緒に使用されるのが、raise。

こいつもまた試してみないとなぁ〜。

初めてのPython 第2版
オライリージャパン(2004-11)

  • (著)マーク ルッツ
  • (著)デイビッド アスカー
  • (原著)Mark Lutz
  • (原著)David Ascher
  • (翻訳)夏目 大

オライリージャパン
新品価格:¥ 5,040
中古価格:¥ 4,100
ASIN:4873112109