今川館

都内勤務の地味OLです

Python

コードフォーマッター「black」を使ってPythonのコードの整形で悩むのをやめる

Pythonにもblackというgofmtみたいなコードフォーマッターがあった Goを書いていると、gofmtコマンドを叩くとインデントやTrailing whitespaceなどを勝手に直してファイルを書き換えてくれる。 わたしがPythonを使ってきてGoを覚え始めたときにこれは便利だ…

poetryのバージョンを指定する記号 "^" ハット/サーカムフレックス/キャレット

Caret requirements (キャレット要件) poetryのpyproject.tomlでPythonパッケージのバージョンを指定する記号の意味がよくわからなくて調べた。特に頻出して意味がわからなかったのが [tool.poetry.dev-dependencies] coverage = "^4.5" flake8 = "^3.5"この…

Pythonでサロゲートペア -- ほっけの逆襲

Pythonで「ほっけ」という漢字をprintに渡すとどうなるか試した。 「ほっけ」はサロゲートペアの文字である。 Python2は寛容に処理してくれるが、Python3は原則としてサロゲートペアを許さないので、エラーオプションに許可するよう指定する。

Pythonのdate, datetimeをisinstanceで調べるとき

Pythonのdatetimeをisinstanceで調べると、date, datetimeの両方にTrueを返すので注意。 >>> from datetime import date, datetime >>> today, now = date.today(), datetime.now() >>> isinstance(today, date) True >>> isinstance(today, datetime) False…

setup.pyのdependency_linksの書き方

前回の続き 前回の記事でpipコマンドにGithubのリポジトリにsshで接続するURLを指定する方法を紹介した。今度はsetup.pyで非公開プロジェクトを依存パッケージに指定する方法をここにメモしておく。なお、わたしはwheelパッケージの仕様を知らないのでここで…

pipでGithubにssh接続して非公開リポジトリをインストールする

非公開リポジトリのパッケージをインストールするのは難しい 自社のプライベートプロジェクトを別のプロジェクトから利用したい場合、簡単にpipやeasy_installでインストールできず困ることがある。

Djangoのtransaction配下のモジュールはデコレータでありコンテキストマネージャであった!

Djangoでトランザクション制御するときに使うデコレータ Djangoでトランザクション制御するときは、django.db.transaction配下にある commit_on_success commit_manually こういうデコレータを使います。 from django.db import transaction @transaction.co…

Djangoのフォームに入力した値を隠しパラメータで引き継ぐ

確認画面作るのって面倒くさいですよね? 何かのデータの登録画面を作るときに入力画面→確認画面→完了画面 という遷移にすることが多いですよね。 この、「確認画面」てやつは作るの手間がかかって嫌ですよね。 複雑なデータ登録だとセッションとかキャッシ…

何段にも深くなるループを絶対に一段で書く方法

ループの中でループを回す処理は読みにくい 例えば友達が5人いて、サンドイッチが3種類あって、2種類の飲み物を配る処理を作るとします。 こういう場合、for文を何段にもネストするプログラムを書かざるを得ないときがありますよね。 for friend in friends:…

coverage combineコマンドで複数の集計結果を結合する

カバレッジ(網羅率)とは? カバレッジとはテストコードがどれだけテスト対象の内容を網羅しているかを表す割合です。例えば、以下のファイルにはfoo, bar, bazという3つの関数が定義されていますが、これらのすべての内容をテストで実行済みであればカバレッ…

イテレータは前に突き進む

http://d.hatena.ne.jp/imagawa_yakata/20120104/1325703433 このネタなのですが、id:yanolabさんが別の解答を書かれています。map_between をやってみる -slice使ったっていいじゃない編- - yanolabの日記 from itertools import islice, imap imap(func, i…

イテレータって何?

iter関数にリストを渡すとリストはコピーされないの? 昨日書いた↓この記事を見たtell-kがコメントをつけてくれました。 http://d.hatena.ne.jp/imagawa_yakata/20120104/1325703433 > itr = iter(lst)これってイテレータオブジェクトになったコピーが返って…

リストの隣接要素を次々に処理する

map_between をやってみる - Study08.net 対シンバシ殲滅用人型機動兵器 こういう記事があって、リストの隣接する要素を次々に処理する高階関数を作る話のようです。期待する挙動としては、こんな感じです。 >>> map_between(lambda x, y: x + y, [1, 2, 3, …

かけ算演算子の挙動を定義する -- Pythonの特殊メソッド

かけ算に順番が必要?必要ではない? かけ算に順番が必要である・必要ではない という話が世間では話題になっているようです。かけ算の5×3と3×5って違うの? - Togetterまとめ そういえば掛け算にはそんなルールがあったなTwitterのタイムラインでも上記の話…

re.subにはcallableなオブジェクトを渡せる

python-mini-hackathonで教えてもらった。 知らなかった。以下、例を殴り書き。 import re def main(): text = """ name = %NAME% age = %AGE% location = %LOCATION% """ pattern = r"%([A-Z]+)%" values = { "NAME" : "easy", "AGE" : "13", } def fn(matc…

python-dateutilの使い方

pythonの日付処理モジュールとしてdatetimeパッケージがあるが、dateutilパッケージのモジュールがもっと色々面倒を見てくれるのでちょっと調べてみた。 dateutilがやってくれること 沢山あるけど以下、わたしが使いたいと思った機能を抜粋。 月末を算出して…

enumerateの代わりにitertoolsを使ってみる

itertoolsのについてメモ -- 似非言語オタクの戯言 http://d.hatena.ne.jp/aitahoge/20110517/1305611498この記事を読んでいて気づいたこと。 count(start=0, step=1) 名前のとおり、next()が呼び出される度にカウントされる。 izip()との併用とか、enumerat…

マルチバイト文字を含む正規表現のパターンを定義するときはunicodeでパターンを書かないと予期せぬ結果をもたらす

adminuser.pyを書いていたときにはまったのがこの問題。 reモジュールを使って半角と全角のスペースで文字列をsplitしようとしたのだが、 正規表現パターンをstrで渡してしまいおかしな文字列分割が行われてはまった。 regex1 = re.compile(r"[ ]+") regex2 …

pythonのunittestで例外の送出を検証する場合はassertRaises

pythonのunittest.TestCaseで例外の送出を検証したいときは TestCase.assertRaises TestCase.failUnlessRaises でやる。 試しに上記メソッドで検証した場合と独自にそれっぽい検証メソッドを定義した場合を比較してみる。 # -*- coding:utf-8 -*- import uni…

minimockの使い方

pythonのモックとしてminimockというライブラリがある。 日本語のドキュメント・ブログが見当たらないので使い方をここに書いておく。 minimockを構成するモジュール mock関数 -- モックを当てる。 restore関数 -- 当てたモックを解除する。 Mockクラス -- m…

Unicodeの「横棒」文字

[日本語の横棒記号に絶望した] http://taichino.com/programming/1384[従来の文字コードとUnicodeの対応に関する諸問題] http://euc.jp/i18n/ucsnote.ja.html ↑Unicodeでは横棒文字がたくさん定義されている。 しかし、人が画面に入力する横棒なんて、見た目…

続:文字列リテラルは連続させられる

http://d.hatena.ne.jp/imagawa_yakata/20091120/1258698626↑これの続き。文字列リテラルを連続させて一つの文字列リテラルを作る場合、すべてリテラルで記述しなければならない。 変数を混ぜると構文エラーになる。 s = ( r'^[' r'abcXYZ' r']+$' ) print s…

MySQLdb カーソルをN件ずつフェッチする

↓ここを参考。 Django(正確にはMySQLdb)をつかってMySQLの巨大な結果を返すselect文を処理する http://d.hatena.ne.jp/shohu33/20091122↓こちらも。 http://www.ueblog.org/blog/entry/pythonmysqldb/ MySQLdbで大量のレコードをSELECTする場合、 cursor.exe…

MySQLdb SQL文のエスケープ

MySQLdbでcursor.executeをしたときに%sの可変部分をどう処理しているのか調べた。 どうも、connection.literalというメソッドがあるようだ。 [MySQL-python-1.2.3c1/MySQLdb/cursors.py] def execute(self, query, args=None): ''' 中略 ''' if args is not…

文字列リテラルは連続させられる

これは知らなかった。 文字列リテラルは連続させると一つにつながる。 例えば、 >>> print ('foo' ... 'bar' ... 'baz') foobarbaz↑このようになる。 (括弧はリテラル3個をひとまとめの評価にする為で、カンマで区切ってタプルにしてはいけない)三連クォー…