#more /usr/local/lib/python2.4/site-packages/py/test.py if __name__ == '__main__': print __file__ # python /usr/local/lib/python2.4/site-packages/py/test.py /usr/local/lib/python2.4/site-packages/py/test.py
子プロセスが下のような「何かを出力して終了する」というものなら何も考えずに子プロセスの標準出力から読んでしまってかまわない。 # print.py print "Hello!" # readline.py import sys from subprocess import Popen, PIPE p = Popen(sys.argv[1:], stdout=PIPE) print "data:", p.stdout.readline() $ python readline.py python print.py data: Hello! しかし、子プロセスが下のような終了しないものの場合、この方法では読むことができないことがある。 print "Hello!" from time import sleep while True: sleep(1) $ python readline.py p
突然、Pythonネタである。シェルがらみの話題が続いたので、リダイレクトとパイプを中心にrcのコードリーディングでもしようかと思ったが、似たようなものを作ってみる方が面白そうだ。しかし、いまさらCか?というのもあって、お勉強がてらPythonで書いてみる*1。調べてみると必要なシステムコールのラッパはosモジュールで提供されているようだ。 さっそく、まずはsystem関数を使ったありがちな手抜き実装。 import os import sys class PySh: def __init__(self): self.prompt = "% " def loop(self): try: while True: line = raw_input(self.prompt) os.system(line) except KeyboardInterrupt: sys.exit(1) if __na
メソッドのself (2)について少し書いてみる。 pythonの不満点でよく上がる定番の話は self地獄 インデント地獄 GIL外せよ! なんだけどそのうちのひとつであるselfの話。 まあ死ぬほど聞く話ではあるけど。 多分和訳より原文の方を読むと掴めるんじゃないかな。 decoratorがなぜ問題になるか?って部分だけど。 decoratorってある意味ブラックボックスでなんでもできちゃうので自動でboundさせるのむずくね?みたいな話なのかなと。 def deco(fun): def meth(self, arg): self.val = "decorator" return self.val return meth class C(object): @deco def meth(self, arg): self.val = arg return self.val c = C()
Python 3.1a0 (py3k:67517, Dec 4 2008, 22:33:17) [GCC 4.0.1 (Apple Inc. build 5484)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> l = [n for n in range(5)] >>> l [0, 1, 2, 3, 4] >>> l.__class__ >>> s = {n for n in range(5)} >>> s {0, 1, 2, 3, 4} >>> s.__class__ >>> d = {n:n for n in range(5)} >>> d {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} >>> d.__class__ おー出来た!なんかすげー!!
python2.6 親はメインのacceptに専念。 子プロセス側でecho処理。 from multiprocessing import _multiprocessing import os import socket import time class FDDispatchServer(object): def __init__(self): self.is_child = None def fork(self): pid = os.fork() if pid > 0: self.is_child = 0 else: self.is_child = 1 def ready(self): if self.is_child: self._child_ready() else: self._parent_ready() def _parent_ready(self): time.sleep(
1. 関数型プログラミングのための functools, itertools モジュール Python 2.7 Python の標準ライブラリには、関数型プログラミングにとって重要なモジュールがある。 9.7. itertools — Functions creating iterators for efficient looping 9.8. functools — Higher-order functions and operations on callable objects itertools, functools は、 The Python Standard Library — Python v2.7.3 documentation 9. Numeric and Mathematical Modules の階層の中にある。 9. Numeric and Mathematical
1. 順列の意味 順列 – Wikipedia によると、 組合せ数学における順列(じゅんれつ、permutation)は、あるひとつの集合から要素を選び出して、順番に意味を持たせて並べる (ordering) ときの、その並び(ordered list, sequence; 有限列)のことである。 うーん、ややこしそう。 (+_+) 数学苦手。どうやって生成するんだろう。 2. アルゴリズム 順列の生成とList内包表記 - 趣味的にっき によると、 与えられたリストから要素を1つ取り出して、残りの要素から再帰的に順列を求めて、それらを結合するアルゴリズムです。 (…) まずHaskellの場合。 (…) perms :: Eq a => [a] -> [[a]] perms [] = [[]] perms xs = [ h : t | h <- xs, t <- perms (xs \
基本事項 クラスを定義するには、 class ClassName(SuperClass): definition のように書く。 メソッドの定義 通常の関数と同様、defにより定義する。メソッドと関数の違いは、メソッドの第一引数が常にオブジェクト自身を指す参照として扱われることである。慣例として、メソッドの第一引数には「self」という名前をつける。 class ClassName: def methodName(self, arg1, arg2): definition メソッドのオーバーライド 同名のメソッドを定義するだけである。Pythonにおいて、すべてのメソッドはvirtualである。 特殊なメソッド コンストラクタ/デストラクタ コンストラクタ、デストラクタは、それぞれ__init__、__del__という既定の名前を持つメソッド。デストラクタが呼び出されるのは、GC
perlでは関数splintfを使うと、いろいろな書式で数を文字列に変換できるようで、 my $value = 255; my $str = splintf('%X', $value); print $str; とすれば FF と出力される。 pythonでは関数splintfは無いようなので、 value = 255 str = "%X" %value print str とすれば良いみたい。 0〜255までの16進数の表を作るには、 perlだとforeach文を使って foreach my $value (0..255) { my $str = splintf('%X', $value); print $value, ' -> ', $str, "\n"; } とするようだが、pythonだと for i in range(0, 256): print "%d -> %X" %(i,
2006年11月26日02:45 カテゴリLightweight Languages perl, python & ruby - ord() vs. Unicode というわけで、ord篇はこちら。 404 Blog Not Found:perl, python & ruby - chr() vs. Unicode とりあえずchrが長くなったのでordは別entryということで。 文字から数値へ(ord) まずはPerlの例。 #!/usr/local/bin/perl use strict; use warnings; use utf8; binmode STDOUT, ':utf8'; sub say { print @_, "\n" }; say ord "\x{61}"; say ord "\x{3b1}"; say ord "\x{5F3E}"; say ord "\x{2A6
ref:2007-12-02 - プログラミング日記 なるほど。同値関係を定義できるのに、同一オブジェクトじゃないと同一ハッシュにならないという状況はいろいろまずそうだから、それを回避するわけだ。 しかし、新スタイルクラスではobjectに__hash__が定義されているので必ず__hash__を持つので、Cのソース中のTypeErrorは起こらないと思う。その代わり、list自体は__hash__でTypeErrorを投げるように実装されているのではないだろうか。 Objects/listobject.c を見てみた。 static long list_nohash(PyObject *self) { PyErr_SetString(PyExc_TypeError, "list objects are unhashable"); return -1; } PyTypeObject PyL
PEP 289 – Generator Expressions Author: Raymond Hettinger <python at rcn.com> Status: Final Type: Standards Track Created: 30-Jan-2002 Python-Version: 2.4 Post-History: 22-Oct-2003 Table of Contents Abstract Rationale BDFL Pronouncements The Details Early Binding versus Late Binding Reduction Functions Acknowledgements References Copyright Abstract This PEP introduces generator expressions as a hi
西尾泰和のはてなダイアリー: __hash__ (http://d.hatena.ne.jp/nishiohirokazu/20071130/1196442062) なるほど。__hash__も__cmp__、__eq__も定義されていなければid(obj)が使われるのか。 なんで「tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL」って条件が必要なのかがわからない。tp_hashを持っているならそれでハッシュ値を計算して、持ってないならポインタの値から計算する、でいいのに。 これは、 Effective Python: 2 __hash__ (http://morchin.sakura.ne.jp/effective_python/dict_user_def.html) に書いたことで、 >>> class Foo(object): ...
http://d.hatena.ne.jp/morchin/20071130/p1 を読んで。 object.cから転載 long PyObject_Hash(PyObject *v) { PyTypeObject *tp = v->ob_type; if (tp->tp_hash != NULL) return (*tp->tp_hash)(v); if (tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL) { return _Py_HashPointer(v); /* Use address as hash value */ } /* If there's a cmp but no hash defined, the object can't be hashed */ PyErr_Format(PyExc_TypeError, "unh
Python2.5のときは、新スタイルクラスのインスタンスは辞書のキーとして必ず使用できたけど、Python 2.6ではそういうわけじゃなくなってるぽい。という話。 class TestClass(object): def __init__(self, i_name): self._name = i_name def __eq__(self, i_other): if not isinstance(i_other, TestClass): return False return self._name == i_other._name print 'object.__hash__ = ' + str(object.__hash__) print 'TestClass.__hash__ = ' +str(TestClass.__hash__) 上記のようなコードを実行したら、Python 2.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く