2006-11-22 23:08:13

先頭から2文字ずつ取る

テーマ:Python
16進ダンプデータを変換するスクリプトを書いていて、
色々邪魔な文字を削除した後の任意の長さの16進数データを得たとする。
0123456789abcdef

これから、
[0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef]

というリストを得たい。
そんなとき書いたスクリプトがこれでした。

def bytelist(s):
result = []
for idx in range(0,len(s),2):
result.append(int('0x'+s[idx:idx+2],16))
return result

for x in bytelist('0123456789abcdef'):
print "%s " % hex(x),

しかし、もっとエレガントに書けないかとおもって、工夫したのがこれ。

def bytelist(s):
result = []
for a,b in zip(s[0::2],s[1::2]):
result.append(int('0x%s%s' % (a,b),16))
return result

len()やidxなどの変数や概念が無くなった所がPythonっぽくっていいと思ったのだが、
これを動かそうとしていた環境がPython2.2しか入っていなくて、結局元に戻した。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-11-16 00:46:44

Pythonのジェネレータで四角いらせんを書くのに反応した

テーマ:Python
西尾泰和さんのブログの「Pythonのジェネレータで四角いらせんを書く」に反応してみた。
Pythonの短めのコードを見ると、ついつい自分ならこう書き直す、みたいに反応出来ちゃうのがいいね。

最初はPythonらしく短くならないかと思ったんだけど、なんかいじくりまわしているうちに、これってタートルグラフィクスじゃねーのって思って、それっぽくなおしてみました。

def squareSpiral():
class turtle:
x, y = 0, 0
dx, dy = 1, 0
def right(self):
self.dx, self.dy = -self.dy, self.dx
def forward(self,n):
for i in xrange(n):
self.x += self.dx
self.y += self.dy
yield self.x, self.y

width = 0
t = turtle()
yield t.x, t.y
while True:
width += 1
for i in xrange(2):
for x,y in t.forward(width):
yield x,y
t.right()

g = squareSpiral()
for i in range(10):print g.next()



なんかアルゴリズムも変わってしまって元々の意図(「アルゴリズムを確認するためにPythonでわかりやすく書いてからJavaで書く」という趣旨)なんか跡形もなくなっている気がしますが。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-11-09 00:05:56

流行にのってvimに

テーマ:Python
なんか最近記事を書こうとする度にメンテナンスだったりするんですが。

えーと、Python使いとして流行を追ってエディタをvimにしてみました。
実際は、gvimになりますが、とりあえず、本家版に香り屋版の起動スクリプトを合わせた感じで。
意外に設定方法をネットから収集出来ず苦労したけど、vimからそのままPythonコードを実行するコマンドを書けるようにはなった。

python import vim
command Py python exec('\n'.join(vim.current.buffer))

これを_vimrcに書いた。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。