Python

遅延リストを使った解

from itertools import imap, izip, cycle fizz = cycle(['','','Fizz']) buzz = cycle(['','','','','Buzz']) for num,text in izip(xrange(1,101), imap(''.join,izip(fizz,buzz))): print text or num xrange ... xrange(1,101) 1から100までの数値範囲の…

登録してみた. http://rubyforge.org/projects/rupy/ RuPy Marshal # marshal_dump.py ... データ作成の為のPython script import sys, marshal def main(filename="test.dump"): data = [ 10, 10.0, -10000, os.environ.get('USER',None), ['foo@example.or…

RubyObject

classを宣言した時に、(スコープ内に)クラスが既に存在していれば、 既存のクラスを拡張しそれを返す。Rubyの様なclassの振舞を提供するメタクラス。 import inspect class RubyMetaClass(type): def __new__(self, classname, classbases, classdict): try:…

遅延リスト

Haskell [0..10] ++ [20..30] Python import itertools ietrtools.chain(xrange(0,11), xrange(20,31)) xrangeは厳密には違うらしいけど、似たような動作をするものという事で。 ここでの利点は、リストの生成を遅らせる事で一時的なメモリの使用量を抑える…

Loggerにつかえるアスペクト・メタクラス(?)を書いてみた。 (何度目だろう ... ) class HelloWorld: def sayHello(self): print "Hello, world" class HelloWorldAspect(Aspect): _target_class = HelloWorld def before_sayHello(self, *args, **keys): pr…

Mail for Hina chan

from poplib import POP3 def biff(hostname, username, password): try: pop3 = POP3(hostname) pop3.user(username) pop3.pass_(password) mails,bytes = pop3.stat() pop3.quit() except: mails = -1 # error code return int(mails) notes: Hina chan wa…

Select based server

import socket import select import thread def service(server): iw = [server] ow = [] data = {} while 1: (ins, _, exs) = select.select(iw, ow, iw) if exs: break if ins: for i in ins: if i == server: # client 接続 client,addr = server.accept…

How to use unittest

import unittest define a class for test that extends TestCase override setUp, tearDown method implement test* methods for test cases run unittest.main() import unittest class Person: def __init__(self, name): self.name = name def getname(s…

How to make server program

import SockServer class for request that extends BaseRequesthandler class for server that extend TCP/UDP Server If you needs, with Fork/Thread MixIn import SocketServer ECHO_PORT = 23456 CRLF = '\r\n' class EchoRequestHandler(BaseRequestHa…

YatAnotherWayToDo ...

from operator import mul def fact(num): if num

C/C++言語ライクな関数

PeterNorvig氏のPython IAQより・・・ 他にも EnumやStructの簡単な実装が書かれてあった。 enumは、僕が昨日日記に書いたのとは別の方法だった。 簡単な例では、red,green,blue=range(3)から、 他の例ではクラスを使ってクラスの__dict__に直接読み込む方法…

Adapter/Adaptee pattern

pythiusプロジェクトのaop.pyも使ってみたが、 独自の実装でAdapterパターン with AOP from types import FunctionType from __future__ import nested_scopes import sys if sys.version_info[0:2] api(_adapter, adaptee): for name,value in _adapter.ite…

Enum

Pythonで列挙体を生成するユーティリティ関数作ってみた。 コンパイル時に型チェックしない言語/環境では、 その恩恵を受けられないため軽視されがちだけど。値の生成だけでも欲しくなった。ここでは名前のリストを渡して、 値が適当に重複しない値になって…

リストクラスを継承してあたらしいクラスを作る。 class NewArray(type([])): def sum(self): return reduce(lambda x,y: x+y, self) >>> alist = NewArray(range(1,11)) >>> alist.sum() 55

import sys class Screen: def outputToStdout(self, s): sys.stdout.write(s) class Printer: def output(self, *args): raise NotImplementedError class PrinterScreenAdapter(Printer): def __init__(self, screen): self.__screen = screen def output(…

import sys def main(argv=sys.argv): for i range(len(argv)): print "%d %s" % (i, argv[i]) if __name__ == '__main__': sys.exit(main())

Iteraror and Generator

#! ruby def fibUpTo(max) a,b = 1,1 while a #! python from __future__ import generators def fibGenerator(num): a,b = 1,1 while a class Fib: def __init__(self, max_num=0) self.max_num = max_num self.i = 1 self.num = 0 def __iter__ (self): re…

exercise 1.6

平方根を求めるアルゴリズム sqrt-root. ビルトイン関数に含まれているのだけど、アルゴリズムの演習って事で、 再実装してみる。 まずは、Schemeで。 (define (sqrt n) (define (abs n) (if (improve guess n) (average guess (/ n guess))) (define (good-…

Scheme (define (fib n) (if *1 (fib (- n 2))))) Python def fib1(n): return n <= 2 and 1 or fib1(n-1) + fib1(n-2) def fib2(n): if n <= 2: return 1 else : return fib2(n-1) + fib2(n-2) Haskell でパターンマッチを利用しての関数宣言。 fib :: Inte…

abs の実装。Scheme (define (fib n) (cond ((> n 0) n) ((= n 0) 0) ((< n 0) (- n)))) (define (fib n) (if (< n 0) (- n) n)) Ocaml let abs = fun x -> if x < 0 then -x else x;; Python abs1 = lambda x: x < 0 and -x or x def abs2(n) : if n < 0: r…

遅延ジェネレータの使い方。簡単な例を、イテレータやジェネレータを使って実装してみます。 for i in range(1, 11, 1): print i range(1, 11, 1) は 1..10迄の整数のリストを返す。リストを返す関数を使った場合、その場合は勿論リストが生成されるので、 …

;; python で書いてみる。 def square(x): return x*x def sum_of_squares(x, y): return square(x) + square(y) def f(a): return sum_of_squares(a+1, a*2) # or # f = lambda a:sum_of_sequence(a+1, a*2) f(5) TODO : search about 遅延評価メカニズム …

units count

units = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000] def cnt(units, amount): if len(units) == 1: print "%10d : %d\n" % ( units[0], int(amount / units[0]) ) return amount % units[0] else: return cnt(units[:1], cnt(units[1:], amount)) i…

#!/usr/bin/python if __name__ == '__main__': print "Hello, world" メイン関数はなくてもいいけど、 もし書くとしたら、以下の記事を参照。 Python main() functions>http://www.artima.com/weblogs/viewpost.jsp?thread=4829