IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.
2つのポインタの指し示す先が同じものかどうか確認する。本来ならば比較するだけのはず。しかし、これを Python 、 ctypes でどう実現するのかが分からなかった。 Python でつくられたポインタオブジェクトはあくまで Python のオブジェクトであって C のポインタじゃないから。便利さの代償か。 ctypesはOOR (original object return、元のオブジェクトを返すこと)ではないことに注意してください。属性を取り出す度に、新しい同等のオブジェクトを作成していいるのです http://www.python.jp/doc/release/lib/ctypes-pointers.html >>> from ctypes import * >>> a = c_int(1) >>> b = pointer(a) >>> c = pointer(a) >>> b i
pythonとc++のインターフェイスを作る方法には boost.pythonを使う方法 swigを使う方法 python.ctypesを使う方法 f2py (Fortranを使うためのInterface)を使う方法 pyreを使う方法 直接Cのインターフェイスを作る方法 があるようだ。 http://www.scipy.org/Cookbook のUsing NumPy With Other Languages のセクションにさらに詳しい解説がある。 ここでは特に配列(numpyの行列)をc++と連携して使う方法に注目していくつかの方法を比較する。numpyは数値計算や行列演算を行うpythonのパッケージでnumarrayの後継にあたる。numpyはnumarayと違って行列が配列の先頭ポインター(double *array)を渡すだけでc++とやりとりができる。そのためc++との連携
http://enbug.tdiary.net/20090322.html#p01の話だけど。 個人的には両方必要じゃね?と思うんだけど。 まあjavaのような使い分けをする前提ならばだけどね。 そもそもごった煮でどちらかにするとかいう方が間違いなんじゃないかと思うけど。 まあpythonの文化的に覚えることを増やしたくないとか、明確な使い分けの方法を提示し、PEPに書くのがしんどいとかあるのもわかる。 現状だと使うにしてもどっちつかずで ABCは2.6以降からじゃないとダメ インターフェイスだとzope.interfaceを別途入れてやら無いといかん というめんどくささを抱えてるので「つかわねーよ!バーロー!」という話もあったりする。
_ ABCとインターフェース 先日Zope 2.12のalpha1がリリースされて、 いろいろ面白いことになっているので、 手元で遊んでみていました。 Zope 2.12自体でも、Zope 3のオブジェクトがそのまま使えるようになったりとか(aq_parentとかをハックしている)、いくつか楽しい変更があるんですが、Python 2.5/2.6をサポートしたのはかなり大きな進展です。 残念ながら手元の環境のRPMはPython 2.5.2なので、Zope 2.12が対応している2.5.4 or better、2.6.xという条件に当てはまりません。 面倒くさいので、手っ取り早く2.6.1をダウンロードしてきて、手元でビルドして使ったんですが、一応動いているように見えます。 Zope自体の話を書いてもいいんですが、ここではPython 2.6の話を書きます。 せっかく最近のPythonが使え
「GAEのDatastoreって1000件しかデータがとってこれないよねぇ、大変だよねぇ」という、意味が有るのか無いのかよく分からない会話をしたりする訳ですが、1000件というの数が、どこに効くのかなぁと思いテストコード Model.all()が1000件ずつ区切られて、その中でorder掛かったりしても全然うれしくないなぁという事をすっきりさせたかった。 from google.appengine.ext import db class Feed(db.Model): feed_id = db.IntegerProperty() link = db.StringProperty() text = db.StringProperty(required=True) screen_name = db.StringProperty() created = db.DateTimeProperty(
In this tutorial, I will describe how to write a simple MapReduce program for Hadoop in the Python programming language. Motivation Even though the Hadoop framework is written in Java, programs for Hadoop need not to be coded in Java but can also be developed in other languages like Python or C++ (the latter since version 0.14.1). However, the documentation and the most prominent Python example o
python2.6から導入されたnamedtupleについてちょっくら書いておくか。 namedtupleって? namedtupleは名前の通り名前付きでアクセスできるtupleを返す。 >>> from collections import namedtuple >>> p = namedtuple('Point', 'x y') >>> p1 = p(11, 22) >>> p1[0] 11 >>> p1[1] 22 >>> p1.x 11 >>> p1.y 22 >>> p2 = p(x = 33, y = 44) >>> p2[0] 33 >>> p2[1] 44 >>> p2.x 33 >>> p2.y 44 >>> とまあこんな感じ。 namedtuple関数に名前とフィールドを渡すと名前付きでアクセスできるものを 作成するものを返す。 仕組み 実際にはnametuple関数
メソッドの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()
mopemopeのおらっちゃ富山県民やちゃあ: selfの話 (http://d.hatena.ne.jp/mopemope/20081128/p2) デコレータの問題点を挙げて頂いた。ありがとうございます。 def deco(fun): def meth(arg): #このselfって?? self.val = "decorator" return self.val return meth 将来的にあるクラスのメソッドになりえるものを関数として定義しちゃうケースだとself何を指すのか? 関数でself???関数だよ? ということになっちゃうよね?って話。 結論から言うと、今のPythonでは無理ですね。恐らくPythonはレキシカルスコープしか存在しないと思うので上記のmeth内のselfはレキシカルに解決できないので、selfは未定義となりますね。 私の提案は、selfだけ例外的にダ
問3解答あたり修正(途中経過のものをコピペしてた) 問いはこちらから引用 pyspa challenge 第1回 - 西尾泰和のはてなダイアリー ※まだ問題を解いていない人は上記リンクへ。下記に自己流の答えが書いてあるので注意! 最初に感想とか id:Voluntas師匠に「是非チャレンジしてみてくださいw」と言われて安請け合い。 うーん。問一、二と問三の難易度にかなりの差があると思われ。(問一、二 <<<<<<<< 問三) もしくは自分アホなのかと(ry こういうのやり始めるとムキになって仕事に支障が(ry これで問三の解答が間違っててももう知らんよ、もぉー(´・ω・`) 問一 print "".join(chr(ord(x) + 1) for x in *****) *****の部分に適当なコードを入れてpyspaと表示されるようにせよ 問一の解答 print "".join(chr(
トラバ送っていきなり答えのリンク張ってしまうのはどうかな? と思ったので、リンクは張らないでおきます>< と思っていたけど、解答編からトラバがきたのでリンク張ります! 問題 pyspa challenge 第1回 - 西尾泰和のはてなダイアリー http://d.hatena.ne.jp/nishiohirokazu/20081129/1227952375 *****の部分に適当なコードを入れてpyspaと表示されるようにせよ 第1問 print "".join(chr(ord(x) + 1) for x in *****) chr(ord(x) + 1)が"pyspa"になるxを探します! アルファベット1文字戻ればいいから、o,x,r,o,・・・"a"の前ってなんだっけ? 調べてみよう。 >>> ord("a") 97 >>> chr(96) '`' なるほど、"`"か! というわけで
メソッドのselfに関して再考してみる。selfをなくすためにPythonに互換性を持たせる必要があるということは、ここでは無視する。 和訳 : なぜPythonのメソッド引数に明示的にselfと書くのか (http://coreblog.org/ats/translation-of-why-explicit-self-has-to-stay) メソッドのself (http://d.hatena.ne.jp/morchin/20080923#p1) Self in the Argument List: Redundant is not Explicit (http://www.artima.com/weblogs/viewpost.jsp?thread=239003) Guidoのself必要という理由は以下の3つ。 foo.meth(arg) == C.meth(foo, arg)が成
About this page This page largely documents the history of the process of adding decorators to Python. If you're just interested in what decorators or the '@' symbol mean in Python, see the Wikipedia page http://en.wikipedia.org/wiki/Python_syntax_and_semantics#Decorators or PEP 318. What is a Decorator A decorator is the name used for a software design pattern. Decorators dynamically alter the fu
Computing Thoughts Decorators I: Introduction to Python Decorators by Bruce Eckel October 18, 2008 Summary This amazing feature appeared in the language almost apologetically and with concern that it might not be that useful. I predict that in time it will be seen as one of the more powerful features in the language. The problem is that all the introductions to decorators that I have seen have bee
IOモナドは難しそうだったのでとりあえずMaybeモナドからはじめる。 >>> def Maybe(typ): class Foo(object): @classmethod def return_(_, x): return Just(x) @classmethod def bind(_, m, f): if isinstance(m, Nothing): return Nothing() elif isinstance(m, Just): return f(m.value) class Just(object): def __init__(self, x): assert isinstance(x, typ) self.value = x class Nothing(object): pass Foo.__name__ = "Maybe_%s" % typ.__name__ retur
ニートというのはダメな人じゃない。 ノーワークおじさんなのだ。 人間やればできる。 誰でも可能性の宝庫なのだ。 LISP、C++、Ruby、Pythonなどで、メタプログラミングを勉強できるみたいだ。 メタプログラミング 代表的なメタプログラミングの例はLISPのマクロである。 メタプログラミングの他の例としてはC++における「テンプレートメタプログラミング」などが挙げられる。 Rubyによるメタプログラミング演習 メタプログラミング ― つまり、"コードを生成するコード"を書くこと Pythonでのメタクラス・プログラミング ほとんどの読者は、オブジェクト指向プログラミングの継承、カプセル化、多態性といった概念については、すでによくご存じのことと思います。 といっても、いろいろな親を祖先とする何かのクラスからオブジェクトを生成する 操作は、通常、「単にそういう」ものとして捉えられています
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く