python

コミット時にpdb消し忘れてないかチェックするhg hook

チェック用のスクリプト こんな感じのスクリプト作成 #!/usr/bin/env python import os import sys COMMAND = r"find . -name '*.py' | xargs grep -lr '{pattern}'" INFO = '{filename}: pdb found.' def check(pattern): return os.popen(COMMAND.format(p…

インスタンスに動的にメソッドを追加する

追記: 記事を公開してからおんなじような記事あったりするかなと思ってググったら2年前にIanさんがほとんど同じ内容書いてた。 Pythonでメソッドをクラスまたはインスタンスに動的に追加する - Ian Lewis しかも僕その記事はてブしてたよ… Interactive Shel…

celeryのPeriodic Taskについてのメモ

必要になったので自分用にメモ。今必要な部分だけざっくりと把握しただけなので間違ったこと書いてたらごめんなさい。 Periodic Taskとは Periodic Tasks — Celery 3.0.9 documentationceleryにはPeriodic Taskというタスクをある一定時間ごとに実行してくれ…

sftpserverモジュールをforkしていじった件

諸事情によりテスト用のsftpサーバーが必要になったのでsftpserverなるモジュールを見つけてきた。しかしこいつシングルスレッドなので、やりたいことのためにはmultiprocessingと併用する必要があったわけなんだけど、そうするとなんかエラーが出る。 raise…

Djangoの発行する生SQLが見たい

ForeignKeyとfilterのメモ - AtAsAtAmAtArA DjangoのORマッパーでSQL文を簡単に出力するサンプル - 十番目のムーサというやりとりを見て。シェルで確かめるのが楽だし便利。 django.db.connection.queriesで見られます。おもむろにdjangoのシェルを起動 $ py…

シェル操作課題をPythonでやってみた

はてブのマイホットエントリーを眺めてたらこんなものを見つけた。 シェル操作課題 (cut, sort, uniq などで集計を行う) 設問編 - Yamashiro0217の日記 awkとか全然知らないから勉強になるかなと思って覗いてみたんだけど… いっそpythonのワンライナーで実行…

Python2.7のunittestのassertRaisesはコンテキストマネージャーとして使用出来る

テスト対象 def add(x, y): return x + y 適当すぎだけどご勘弁。異なった型同士を足そうとすれば当然TypeError吐きますよね。 本題 Python2.7以前のunittestのassertRaisesは assertRaises(exception, callback, *args, **kwargs) というように呼び出す必要…

Django 1.4 で新しくプロジェクトを作成した際にしておくsettings.pyの設定

django 1.4 からはプロジェクトを作成した際のディレクトリ構成が変わったのでどのように設定するのがいいかを、まだ数の少ないネット上のサンプルを参考にしつつまとめてみた。ちなみに以下の様な構成を想定してます。 └── project_root ├── app1 │ ├── __i…

デコレータを作ってみる

前回の記事(Pythonのデコレータを理解するときに残したメモ - kk6のメモ帳*)でデコレータについて理解したので、じゃあ今度はデコレータを作ってみようと思う。あんまり詳しくないけどflaskを題材としてみる。 # hello.py from flask import Flask from fl…

Pythonのデコレータを理解するときに残したメモ

Pythonのデコレータ(decorator)を理解する 3 - -を1,2,3全て読んで、以前僕がデコレータを理解するために残したメモもこんな感じだったなというのを思い出した。ずっと記事にしようと思いつつ忘れてたんだけどせっかくなので加筆修正しつつ公開してみる。 引…

集合演算の実行速度:メソッドと演算子

集合演算をメソッドでやる場合と演算子でやる場合、どちらが速いのか気になったので試してみた。なんとなくの予想だと、対象を全てset型に揃えないといけない演算子による計算よりも、メソッドの引数がイテラブルであればなんでもよいメソッド演算のほうが速…

pdbのデバッガコマンド

とりあえず自分用に。あとでちゃんとまとめ直す...かも。 コマンド h(elp) [command] コマンドのヘルプを表示。引数なしで利用可能コマンド一覧を表示| s(tep) 一行実行(ステップイン) n(ext) 一行実行(ステップオーバー)| unt(il) (Python2.6から)行番号が…

Ubuntuを12.04にupgradeしたらvirtualenv環境で'cannot import urandom'と出るようになった

Ubuntu 12.04 がリリースされたということで、僕も 11.10 から 12.04 にアップグレードしてみた。とりあえず仕事に支障がないかひと通り確認してみたところ、とある仕事用のvirtualenv環境をactivateした状態で、テストを走らせようとしたところ ImportError…

DjangoのモデルのManagerクラスのメソッドをメソッドチェインさせる

※追記:django-model-utils というパッケージの PassThroughManager が同じようなことしてくれるみたいです Model Managers — django-model-utils 2.3a1 documentation 例えば下記のような、書籍名・本棚登録済みかのフラグ・出版日を持ったモデルクラスがあ…

SQLAlchemyとpeeweeの比較

とりあえず導入部分だけざっくりと。 データベースへの接続 SQLAlchemy from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:', echo=True) peewee from peewee import SqliteDatabase engine = SqliteDatabase('db.sqlite') e…

mysql-pythonについて

自宅PCのDjangoで初めてMYSQLを使ってsyncdbしたときにエラーがでた。なんか足りてなかったので今後のためにメモっておく。 ちなみにMYSQLは sudo apt-get install mysql-client-5.1 mysql-server-5.1 でインストールした。その後の話。 $ python manage.py …

Problem 4 - Project Euler

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。 翻訳の息抜きがてら久しぶりにProject Eulerやった…

OrderedDictのバグ?

OrderdDictで遊んでたら、下のような現象に遭遇しました。 >>> from collections import OrderedDict >>> d = OrderedDict(one=1, two=2, three=3) >>> d OrderedDict([('one', 1), ('three', 3), ('two', 2)]) >>> d['one'] 1 >>> d.one=100 >>> d OrderedD…

エキスパートPythonプログラミング読書会に参加してきました

この日は14章「Pythonのためのデザインパターン」。一度は行ってみたいと思っていたのと、デザインパターンに興味があったので参加してみました。以下気になったところのメモ。 GoFは「じーおーえふ」と読む。ゴフとは読まない。 元々は建築関係で生まれた言…

Pythonでカリー化と部分適用について考えてみる

まず前提として、ちゃんと学ぶなら自動カリー化をサポートしてるhaskellなりOCamlなりF#なりで学ぶほうが断然いいと思います。 カリー化TLだったので 自分の理解が正しいかどうか再確認。 # こういう関数があるとする def multiply(x, y): return x * y # こ…

pipでインストールしたパッケージのVersion checkとUpgradeをするscript

パッケージ毎に「pip install --upgrade パッケージ名」とするのが面倒だったので書いてみました。ちなみにLinuxだと $ pip freeze | cut -d = -f 1 | xargs pip install -U という方法もあるみたいですが、これだと最新版使ってても全部インストールし直し…

tweepyがUser Streamsに対応していた

ふとgithubのtweepyのコード(tweepy/tweepy/streaming.py at master · tweepy/tweepy · GitHub)を眺めてたら、userstreamなんてメソッドがあることに気づきました。つい数ヶ月前くらいまで「tweepyはUser Streamに対応してなかったので自力で対応した」なん…

Pythonbrew環境下にPySideをインストールしようとしたらはまった

はじめに PySideとはGUIライブラリであるQtのpythonバインディングです。兄弟にPyQtというのがいて、PyQtの技術要件にノキアが納得できなくなったからPySideを開発したとかなんとかいろいろ経緯があるようですけど、基本的に似たようなものとおもっていいと…

pythonのクロージャ

半年以上前に書いた記事ですがネタもないので、 はやくはてなダイアリー市民になりたいので、せっかくなので公開してみます。 なお、その後にid:atsuoishimotoさんがfunc_closureのひみつ - atsuoishimotoの日記というもっと突っ込んだ内容の記事も書かれて…

Ubuntu 11.04にPythonbrewを使ってPython2.5, 2.7, 3.2の環境を構築したときのメモ

Ubuntu 11.04 でpythonbrewを使って環境を構築する際にいろいろハマりました。何度かやってるうちに、こうすればひと通り標準ライブラリや有名所のライブラリが動くのかなーというのがわかったので備忘録も兼ねて記事にしてみました。pythonbrewについての詳…

Python3.2のconcurrent.futuresモジュールを使ってSleep Sort

Python3.2の標準ライブラリを眺めてたら、3.2で新しく追加になったconcurrent.futuresという並列処理用のモジュールが目に止まりました。16.4. concurrent.futures — Launching parallel tasks — Python v3.2.3 documentationパッと思いついたのが先週くらい…

Pythonのisdigit(),isdecimal(),isnumeric()の違いを調べてみた

(2017/8/7追記) 当時は記事内容の通りだったんですが、現在のpython3.6や2.7の最新だとローマ数字はisdigitでFalseを返すようです いつもtwitterでお世話になってる方のブログ記事でこんな記述がありました。 #91 [Python][TDD]テスト駆動開発でFizzBuzzして…

itertoolsモジュールをひと通り眺めてみた

Python 3 からは一部の関数がイテレータを返すよう変更になったということなので、この機会にPython3を触りつつitertoolsモジュールについてひととおり学んでみた。 主に参考にしたのは9.7. itertools — 効率的なループ実行のためのイテレータ生成関数 — Pyt…

Portable Python が Python 3.2 に対応

USBに入れて持ち運べるPython環境、「 Portable Python 」のPython3系対応バージョンが、いつの間にかPython 3.0から3.2にバージョンアップしていました。ダウンロードはこちらのページから。Windowsの場合、最後にインストールしたバージョンのPythonが既定…

Rubyのuniq()をpythonで再現するなら

id:atsuoishimoto さんの uniq()あれこれ - atsuoishimotoの日記 という記事を読み、そのまたリンク先記事やコメント欄を読ませてもらいました。僕はRubyはほとんど知らないのでuniqメソッドについても記事のはじめのほうでは「set()じゃだめなのかな?」と…

Pythonのクラスや関数を簡単に選択するvimプラグイン

vimでhtml編集してるとテキストオブジェクトが便利ですよね。例えばformタグの中にカーソルがある状態で「vat」とキーを叩くだけでform全体を選択状態にしてくれるアレです。pythonでもクラスやメソッドを簡単に選択できたら楽なんですが、なんかいい方法な…

基底クラスの__init__()について

最近必要に迫られてC#を勉強してるkk6です。[雑記] コンストラクター内の仮想メソッド呼び出し (C# によるプログラミング入門) ←ここの「余談: 実行順序に関して」という見出し以下のC#のコードを実行すると以下のように出力される。 Member derived Member…

Sphinxを最新版にアップデートしてmake html出来なくなった時の対処法

make出来なくなった Sphinxを最新版(v1.0.7)にアップグレードしたところ、make htmlコマンドが以下のようなエラーを吐くようになりました。 $ make html Running Sphinx v1.0.7 loading pickled environment... not yet created AccessInit: hash collisio…

Problem 10 - Project Euler

10以下の素数の和は2 + 3 + 5 + 7 = 17である. 200万以下の全ての素数の和を計算しなさい. これもねぇ…素数のリストさえできれば簡単な問題ですよ。しかし僕の作ったコードでは素数リストの生成が終わる気配がありません。お手上げです。 終わらない計算 も…

Problem 6 - Project Euler

3問目までは順番に解いてきましたが、難易度順にならんでるわけでもないようなので今後は解けそうなものから手を付けていくことにします。 最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。1² + 2² + ... + 10² = 385 (1 + 2 + ... + …

Problem 3 - Project Euler

600851475143 の素因数のうち最大のものを求めよ。 大きすぎる数値 素数のリストが作れてしまえば簡単なんですが、昨日も書いたように数値が大きすぎてlong型になってしまいます。xrangeはlong型は扱えないみたい(int型に変換しようとするっぽい)なのです…

素数のリストを生成する(エラトステネスの篩)

Project Euler の第3問は素因数を求める問題なので、まずは素数のリストを生成しようということで「エラトステネスの篩(エラトステネスのふるい)」というアルゴリズムを使用して任意の n 以下の素数のリストを生成するコードを書いてみました。エラトステ…

Problem 2 - Project Euler

Project Euler の2問目は フィボナッチ数列の項が400万を超えない範囲で、偶数の項の総和を求める という問題です。 フィボナッチ数列の一般項 フィボナッチ数列の一般項は以下の通りです。 別に数学が得意というわけではないんですが、ちょうど数学ガールを…

Problem 1 - Project Euler

Project Euler - PukiWiki面白そうだったのでこれから少しずつ挑戦していこうと思います。 まずは1問目 10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、 これらの合計は 23 になる。同じようにして、1,000 未満の 3 …

オブジェクトから様々な情報を取得する inspectモジュール

調べ物をしていたらちょっと面白いモジュールを見つけたのでメモ。 26.10 inspect -- 使用中オブジェクトの情報を取得する バージョン 2.1 で 新たに追加 された仕様です。inspectは、モジュール・クラス・メソッド・関数・トレースバック・ フレームオブジ…