タグ

ProgrammingとPythonに関するagwのブックマーク (766)

  • len が関数になっている理由 - methaneのブログ

    http://d.hatena.ne.jp/pashango_p/20090702/1246550203 len()がリストのメソッドでないのも同じ理由です。 オブジェクト指向的に考えれば、リストのメソッドであるべきなのに、わざわざビルトイン関数にしたんです。 「オブジェクト指向的に考えれば、リストのメソッドであるべき」って感じで、オブジェクト信者はそれが正義みたいに考えちゃうんだろうね・・・ Pythonは合理主義。「オブジェクト指向的に○○」よりも、一貫した少なくて明確なルールを重視する。 len() が .length() メソッドだったらどうなるか。あるコンテナは .length() の代わりに、 .len() や .size() という名前を使ってしまうかもしれない。「サイズを取るメソッドは.length()」という 暗黙のルールができてしまい、そのルールが頭に入っていない人が一

    len が関数になっている理由 - methaneのブログ
  • Pythonは他の言語の慣習の持ち込みを嫌う - methaneのブログ

    拡張引用構文覚えた! こういう経験があると、たかが「List = list」ごときで何を大げさなと思ってしまうけど、Pythonista的にはこういうのも受け入れられないんだろう。 Pythonistaはtypedefすら拒絶する? (Re: Python での組み込み型をより自然な名前にする) - kなんとかの日記 Pythonは一貫性を重視する言語なので、他の言語の慣習を持ち込んで一貫性を崩すことに対するアレルギー反応が強い。 前にも書いたけど、Pythonのtype名が小文字始まりであることについては、特に技術的な利点とかそういうのがあるわけじゃなくて、単に最初の仕様がそうであって、それがそのまま継続されているっていうだけだよね? (違ってたら教えてください) だから大文字始まりのエイリアスを作るぐらい、そんなに目くじらを立てることとは思えない。それなら「typedef unsign

    Pythonは他の言語の慣習の持ち込みを嫌う - methaneのブログ
  • 勝手に採点 (Re: 自分ならこう書く - pythonでA*) - methaneのブログ

    自分ならこう書く - pythonでA* - ラシウラより def astar(init, goal, nexts, distance=lambda path: len(path), heuristic=lambda pos: 0): import heapq queue = [] checked = [init] heapq.heappush(queue, (distance([init]) + heuristic(init), [init])) while len(queue) > 0: score, path = heapq.heappop(queue) last = path[-1] if last == goal: return path for pos in nexts(last): if pos in checked: continue checked.append(pos)

    勝手に採点 (Re: 自分ならこう書く - pythonでA*) - methaneのブログ
  • setの話 - Doge log

    checked が配列なので pos in checked が遅い。 勝手に採点 (Re: 自分ならこう書く - pythonでA*) - methaneのブログ あー高速化のためにsetを使うってやったことなかったな。 計測 import timeit a = range(100000) b = set(a) def test(): return 100000 in a def test2(): return 100000 in b res = timeit.timeit("test()", "from __main__ import test", number=1000) print(res) res = timeit.timeit("test2()", "from __main__ import test2", number=1000) print(res) 結果 9.9578340

    setの話 - Doge log
  • メモリの開放タイミング - Doge log

    pythonの実メモリがいつ解放されるのか気になったので調べてみた。 pythonはメモリを確保する際にドバっと取って使い回すような仕組みを持っている。 (最近の言語はみんなそうかも) この領域をarenaと呼ぶ。 余談だけど2.5以前(2.5の初期も入るのかな?)のバージョンではarena領域は小さくなることはない。 (Timのパッチからスタート。使いまわしはあってもfreeされることはなかった) タイミング的な話なのでもう結論書いちゃうと PyObject_Mallocで作って PyObject_Freeで解放 とまあ普通だった。 使われてないpoolのblockとかはpython objectが解放される毎に解放しているようだ。 なので参照カウントを下げ、PyObject_Freeで解放された時点で全体のメモリも小さくなる。 基的な確保するblockの単位が256Kなので大きいob

    メモリの開放タイミング - Doge log
  • 文字列連結の効率の話 - Doge log

    追記: ベンチ追加した ふと思ったこと。 ret = ''.join([lst]) が速いというのは正しい。 でもそれはjoin関数が速いという局所的な話。 ありがちなコード lst = [] for i in xrange(10000): lst.append("aaa") ret = ''.join(lst) string joinを使いたいがためにlistをpythonのforで回したりして作成する。 string joinの中身 static PyObject * string_join(PyStringObject *self, PyObject *orig) { char *sep = PyString_AS_STRING(self); const Py_ssize_t seplen = PyString_GET_SIZE(self); PyObject *res = NULL

    文字列連結の効率の話 - Doge log
  • builtinの小文字の話 - Doge log

    うーん、これは歴史的経緯があってそーなってると思うのでどーしようもないのかな。 pythonのOOは後付けのはずなので昔のものをそのままひきずってるんだと思うなー。 まあ変えちゃうと相当動かなくなるプログラムでてきそうだし、だからといって別名でつけておくとどっち使っていいの? みたいな混乱がおきるかも知れないって事でそのままなんだと思う。 (pythonはわかやすいようにする文化なのであんましそーいうのは取り入れないはず) まあ上書きできない方が問題なので別に好きにしていいんだと思うな。 別にキャンキャン騒ぐ事でもない。 別に変数で上書きされてもどーってことないしー。 list = 1 # 1 print list # [] print __builtins__.list() List = __builtins__.list # [] print List() ただbuiltinsをいじる

    builtinの小文字の話 - Doge log
  • join - odz buffer

    ref:http://d.hatena.ne.jp/kwatch/20090716/1247717055 知ってて書いているかどうかよくわかりませんが、Python には実際、string.join がありますね。 import string print string.join(['1', '20'], ' ') # 1 20 ところで、separator が optional ってのは自明なんですかね。ちなみに、Ruby の Array#joinPython の string.join では引数省略時の挙動が異なります。 % python Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "cr

    join - odz buffer
  • type name - odz buffer

    ref:http://d.hatena.ne.jp/mopemope/20090716/p1 あとlistとかdictとかをクラスのコンストラクタではなくファクトリ的な関数に捉えてる人がいそうって話もあったりする。 pythonはnewとか付かないのでそれが関数なのかクラスのコンストラクタなのかパッと見わからないからなー。 (小文字クラスを使うことで意図的そー思わせる話もあったり 逆に意外なものがクラスになってたりも。 Python はインスタンス生成と関数呼び出しの区別がつかないですからね。 % python Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "credits" or "license

    type name - odz buffer
  • Djangoチュートリアル(後編)

    はじめに Pythonで開発されたWebアプリケーションフレームワークであるDjango(ジャンゴと読む)はPythonの簡潔さをうまく生かし、シンプルかつ格的な開発ができるWebアプリケーションフレームワークです。稿の前編では、DjangoPythonの特徴、Djangoの概要の紹介とインストール手順、そして、チュートリアルとして、商品(Item)のコマンドラインシェルからのデータ操作、そして、ビュー関数によるHTMLへの表示までを説明しました。後編となる今回は、管理インターフェイスの使い方、ショートカット、汎用ビュー、Formクラス、セッション、キャッシュの使用方法などについて説明します。 対象読者 PythonによるWebアプリケーション開発に興味がある方 日ごろ、PerlRubyPHPJava、C#などPython以外のプログラミング言語で開発している方 Webアプリケ

    Djangoチュートリアル(後編)
  • Djangoチュートリアル(前編)

    はじめに 近年、Webアプリケーション開発で用いるプログラミング言語として、Lightweight Language(以降LL)と呼ばれるスクリプト言語が人気を博しています。稿では、そのスクリプト言語の中からPythonとWebアプリケーションフレームワークのDjango(ジャンゴと読む)を紹介します。 Pythonの大きな特徴として、「言語仕様が小さくシンプルであり、簡潔で読みやすいアプリケーションを作れる」という点が挙げられます。DjangoPythonの簡潔さをうまく活かし、シンプルかつ格的な開発ができるWebアプリケーションフレームワークです。稿ではこのDjangoによるアプリケーション開発の基をチュートリアル形式で説明します。 対象読者 PythonによるWebアプリケーション開発に興味がある方 日頃、PerlRubyPHPJava、C#などPython以外のプロ

    Djangoチュートリアル(前編)
  • 高速数値計算ライブラリ「Numpy」覚書き - Pashango’s Blog

    Pythonで一番有名で普及しているライブラリと言っても過言ではない「Numpy」の覚書きです。かなり多機能な数値計算ライブラリで、内部はC言語で記述されているため超高速に動作します。 ベクトル ベクトルの長さ&正規化 import numpy a = numpy.array([[2,2]]) #ベクトルの長さ length = numpy.linalg.norm(a) #length=>2.8284271247461903 #ベクトルの正規化 a / numpy.linalg.norm(a) #=>array([[ 0.70710678, 0.70710678]]) 内積&外積 import numpy v1 = numpy.array((1,0,0)) v2 = numpy.array((0,1,0)) #内積 numpy.dot(v1,v2) #=> 0 #外積 numpy.cros

    高速数値計算ライブラリ「Numpy」覚書き - Pashango’s Blog
  • Python Corner

    能書き・環境整備 元の "Python Corner" はもう大部古くなってしまったようだ。 何より、現在 (2008-06-07) 主に使っている環境は、Leopard (MacOS X 10.5.3) だったりする……。 なので、すっかり新しくする事にした。 とりあえず、数値計算・プロットを中心に、Leopard 上の環境整備について述べる事にし、GPIB 他のトピックは追々書き足していくつもり。 Leopard に Python をインストールするには色々な手が有るようで、 Leopard についてくるのをそのまま使う。何と、Leopard 10.5.2 には、Python-2.5.1 がついて来た。(/usr/bin/python2.5) MacPort でインストールする。これも 2.5.1。 (/opt/local/bin/python2.5) Python.org から、Ma

    agw
    agw 2009/09/09
    numpy.fftモジュールの使用例。
  • <!--Konrad Hinsen's Python Page-->科学者のための Python 入門 目次

    訳者より: これは、Konrad Hinsen 氏 による Python for Science の中から、An introduction to Python for scientists の部分を和訳したものです。 この教材中の例題には、PDB ファイル(Protein Data Bank、タンパク質のX線構造解析データ)の操作が多く採用されていますが、他分野の方々にとっても有用な題材を豊富に含んでいると思います。 オリジナルに(若干の)改訂がなされていました。改訂箇所は、この色で示してあります。(1999.11.24) これは、グルノーブルの Institute of Structural Biology の同僚たちに行った Python 入門コースの教材です。他の目的に使うのも自由ですし、改善点の示唆も歓迎します。 ただし、これは自習用には作られていないことに注意して下さい。 つまり

  • yota.ro: とらぬ狸 » 科学者に必要なPythonモジュールはなにか?

  • 2009-01-02

    Pythonは科学計算にもよくつかわれるようだ。 科学者に必要なpythonモジュールはなにか 科学者のための Python 入門 とりあえず、Python体に加えて以下のモジュールをインストールしてみる。 Python SetupTools モジュールを簡単インストールできる numpy 行列などを扱える SciPy 数値計算など Matplotlib: Python plotting — Matplotlib 3.0.3 documentation グラフプロットなど。easy_installでインストール PIL 画像処理ライブラリ。easy_installでインストール http://ipython.scipy.org/moin/:pyreadline IPythonで使用するモジュール IPython インタラクティブシェル。easy_installでインストール 準備 Pyt

    2009-01-02
  • NumPy — NumPy

    NumPy is the fundamental package for scientific computing with Python. It contains among other things: a powerful N-dimensional array object sophisticated (broadcasting) functions tools for integrating C/C++ and Fortran code useful linear algebra, Fourier transform, and random number capabilities Besides its obvious scientific uses, NumPy can also be used as an efficient multi-dimensional containe

  • Numerical Python の紹介

    Numerical PythonPython言語に Numeric ライブラリを拡張したものです。 Numerical Python は 数値配列を Python に提供しています。 線形代数、FFT などのライブラリを簡潔なインターフェースで提供しています。 配列の操作も for 文のループで添字を操作する必要がなくなり、見通しのよい簡潔なコーディングが可能になっています。 動作環境は各種 MS-Windows, MacOS, 各種 Unix です。 Numerical Python はしばしば Numeric Python とか NumPy と表記されることがあります。 Numerical Python の簡単すぎる説明 Numerical Python のサイト http://www.pfdubois.com/numpy/ Numerical Python のソースの入手先 h

  • 型チェックをする - YAMAGUCHI::weblog

    動機 Pythonに限らず動的型付けな言語は変数を扱うときに型に気をつける必要があります。いままでは割とざーっと作ってしまっていたので型の扱いはKnownでやっていたのですが、ソースを公開したりしているので多少気をつけていこうかなと思いました。 方法 typesをimportします。 5.15 types -- 組み込み型の名前 下記に一覧をメモしておきます。たいてい<型名>Typeな感じです。 型 定義された名前 None NoneType Boolean BooleanType 整数 IntType バイト文字列 StringType Unicode UnicodeType 文字列(Byte & Unicode) StringTypes リスト ListType 辞書 DictType, DictionaryType 関数 FunctionType, LambdaType ジェネレータ

    型チェックをする - YAMAGUCHI::weblog
  • Pythonで変数の型をチェックする方法(Javaでいうinstanceofが使いたい)

    リスト、辞書、タプルのようなイテレータが使える型には__iter__属性がある ただし文字列には__iter__がない Javaでいうinstanceofがやりたいときは、組み込み関数isinstance(obj, type)を使う issubclass(obj, type)というのもある 基的にPythonではあまり変数の型を気にしないようなのですが、 それでもどうしても型チェックがやりたくなるときはあります。 引数が当にリストなのかどうかチェックしたりとか、引数をfor()文でループさせたいときとか。 そういった場合にPythonではどうすればいいのか調べてみました。 以下、すべてPython2.5.2で動作確認しています。 Javaでいうinstanceofに相当するPythonの組み込み関数はisinstance(obj, type)です。このメソッドを使えば、引数がリストか、