Python

PythonのfileinputをGoで実装してみた

Pythonの○○をGoで実装してみたシリーズ fileinputは、行単位で処理を行うコマンド(特にUNIXフィルタ)を作るときなどに便利なライブラリ。 import fileinput for line in fileinput.input(): process(line) コマンドライン引数で与えられたファイルの行に順…

Python 3.3〜3.5の変更点まとめ(標準編)

この記事は3.2まではPythonを使っていたが、しばらくPythonを離れ、最近戻ってくることになった人*1向けに、 3.3〜3.5で何があったか(何が起こる予定か)をまとめる記事です。 *1:つまり私

Elm 0.14に際して思ったこと

Elm 0.14がリリースされました。 今回のリリースには後方互換性が保たれない、大きな変更が含まれてます。 これによりHaskellとの違いが大きくなったため、もはや「Haskellベースの言語」という表現はふさわしくないかも知れません。 ところで、このような大…

pyenvオワコン、direnv最強

社内勉強会で発表しようと思ったけど、寿司の運搬という重大任務を仰せつかって、流れてしまったスライドを転載 direnv is an awesome successorof ***env's. from Kenji Omoto (なお原稿では乱立する"***env"をマスコミは「目があって角が2本」としか認識…

らんらんら言えるかな?Pythonのなまえ〜

組み込み方面向け?の Micro Python という実装があるらしい。 http://t.co/6cCc1QvIf6 一体Pythonにはいくつ処理系があるのか? #python— 東京の小本 (@doloopwhile) April 13, 2014 というわけで、知ってるだけリストアップしてみました。 Qiitaで続きを読…

早速Python 3.4.0をインストールする

pip同梱! enum! pathlib! functools.singledispatch! ソースからインストール 伝統の ./configure make install するだけです。 # 依存ライブラリをインストール sudo yum install zlib zlib-devel sqlite-devel ncurses-devel gdbm-devel readline-devel b…

json版sedことjqのPythonバインディングをcythonで作った

jqはjsonデータを加工するコマンド、「json界のsed」と呼ばれています。 jq is a lightweight and flexible command-line JSON processor. jqコマンドでjsonデータを整形・絞り込み - Qiita [キータ] JSONを超絶に読みやすくする jq コマンド - WebAPIバリバ…

pathlibはファイル操作の新標準!

Python Advent Calendar 2013の13日目です。 Python 3.4ではasyncio functools.singledispatchなど画期的なライブラリがいくつも追加されています。それはアドベンドカレンダーで皆さんが紹介されている通りです。 そして!その中で最も重要で画期的と言える…

合計が均等になるようにグループ分けする

問題 製品のテストをJenkinsで並列に走らせていると想像して下さい。 実行するテストケースをノードに上手く割り振っていなかったので、 あるノードではテストが5分で終わるのに、別のノードでは40分もかかってしまっていました。 各テストケースの所要時間…

コーディングミスの見逃しを防ぐスクリプト

git diffをブラウザに表示することで、コーディングミスの見逃しを防ぐ(ことを期待している)スクリプトを作りました。 プログラマーとして働き出してそろそろ1年になるのですが、そこで感じている自分の欠点は、コーディングの凡ミスが多いことです。 コ…

逆FizzBuzz問題

近未来、2016年(・・・って、中途半端に近い未来ですね)では、 Googleの入社試験では、逆FizzBuzz問題を解くことになるそうな。 逆FizzBuzz問題 (Inverse FizzBuzz) - 猫とC#について書くmatarilloの雑記 F#で逆FizzBuzz問題 - Bug Catharsis わぁいInvers…

setup.pyについてのいくつかのメモ

モジュールにソースコード以外のファイルを添付する 添付の種類は4種類あります. (1 - 3) setupの引数として指定する(scripts, package_data, data_files). setup.py内のsetup関数の引数としてファイルを指定します. scripts, package_data, data_filesの違…

Python 2.6との後方互換性を保つための4種のTips または, 2.7の新機能紹介

Pythonは2.7が2010年7月にリリースされ, 現在では2.8をリリースするかが問題になっているようですが, 今でも旧バージョンである2.6への需要は存在するようです.ここでは, 2.6互換にするために注意する点を紹介します. 1. 標準ライブラリ 当たり前ですが, 2.7…

グローバル変数は必要です

Life is beautiful: Python Hack : 噛めば噛むほどおいしくなるクロージャの話クロージャと無名関数を使うと、こんな風に実装することができる。 import yaml def _get_from_disk(): data = open('config.yaml').read().decode('utf8') config = yaml.load(d…

声に出して読みたい7つのPython用語

冷凍マグロ系スクリプト言語として知られるPythonの、もっともすばらしい用語7点をご紹介します。これらのネーミングセンスを身につけることによって、PHPerやRubyistでは不可能な変態力を身につける事が出来るでしょう(Perl Mongerには負けるかも知れない…

「結構便利だからみんな使った方がいいぞ!」という7つのPythonライブラリ

一部で最強と呼ばれているPythonには, virtualenvやipythonのような絶対入れる超定番以外にも, あると便利なライブラリというものがあります.ここではラッキーセブン, 7つご紹介しましょう. なお, furl以外は3.xに対応しています. requests 覚えやすいWebリ…

ドライブを一覧表示するコマンド

コマンドプロンプト上でLaTeXでPDFを作成し、それをUSBメモリにコピーする事が頻繁にあるのですが、USBメモリのパスはどれだったっけマイコンピュータを開くのが面倒くさい!というわけで、pywin32で作ってみました。当然、Windowsでしか動きません #!python…

ソニーからの挑戦状をPythonで解いてみた

Sony Japan | 採用情報|新卒採用|GO FOR IT~情熱と技術が世界を変える~の真似をして、Pythonで書こうと思います。以下で作るCubeクラスの仕様はPyQt4/PySideのQtCore.QRectと同様にしたかったのですが、QtCore.QRectは >>> QtCore.QPoint(0, 0) in QtCor…

みんなのPython を3.xで勉強するためのTips

みんなのPython Webアプリ編がPDFで無料公開されていますが、この本はPython 2.x向けに書かれているので、3.xではそのまま動かない点がチラホラ・・・とりあえずChapter04を読んでみたところ、以下のような変更が必要です。 CGIHTTPServer -> http.server 3.…

エイトクイーン問題を解いた

wikipedia:エイト・クイーン問題 #!python3 #encoding:mbcs from itertools import ( combinations, permutations, product, ) def main(): board_size = 10 n = 0 for y_values in permutations(range(board_size), board_size): queens = set((x, y) for x…

RubyのExecJSをPythonに移植しました

ExecJSはRubyからJavaScriptのコードを実行できるライブラリです。ExecJSは、もしrubyracerなどJavaScriptライブラリがあればそれを利用し、さもなくばコンピュータからNode.jsなどのインタープリタを検索してきます。JScriptも使えるため、自前でV8をビルド…

Pythonスクリプトから管理者権限が必要なコマンドを実行する

Windows 7(多分Vistaも)で、Pythonからregeditなどの管理者権限が必要なコマンドを os.systemやos.popen subprocess.Popen/call/check_callをshell=Trueで呼び出した場合は, 自動的にUACのプロンプトが表示されます。 >>> subprocess.check_call("regedit", …

整数・ローマ数字変換(Python版)

http://d.hatena.ne.jp/fumokmm/20110822/1314013182アラビア数字 ローマ数字変換を行う関数、arabicToRoman および romanToArabic を実装せよ。条件) ・ローマ数字の表記法についてはローマ数字 - Wikipediaを参考にすること。 ・ローマ数字は半角英「I,V,…

Pythonを始める人への日本語情報集

@mopemopeさんからバトンを渡されました、2011 Pythonアドベントカレンダー(Python3) 16日目担当のおもけん(@doloopwhile)です。 Q「RubyとPythonどちらが初心者向けでしょうか?」 A「Pythonは日本語情報が少ないので、Rubyがおすすめです」 質問掲示板な…

\PythonとRubyのdefって何が違ふんです?/

Pythonのdefは関数、Rubyのdefはメソッドを定義します。両者の違いはdefがネストすると現れます。Pythonでは、ネストしたdefではローカル関数が定義されます。ローカル関数はその場で使われるだけで、外部には影響は及ぼしません(グローバル変数に代入した…

PIL無しでアニメGIFを作るPythonモジュールを作った

PythonでアニメGIFを作るには, BoxHeadRoom » Blog Archive » PythonでアニメGIF作成 その1のようなコードがあり, これはPILを使っています.しかし, これのためだけにだけにPILをimportしたくはないし,PILは画像のLZW圧縮の部分にしか使われていません. そ…

PythonでFibBuzz

Codnote.net ScalaでFibBuzz - ( ꒪⌓꒪) ゆるよろ日記FizzBuzzは時代遅れらしいので、ニューウェーブに乗るべく、Pythonで解いてみましたまず、普通の回答 from itertools import islice def fizzbuzz(x): if x % 15 == 0: return "fizzbuzz" elif x % 3 == …

素集合データ構造

元ネタ: http://con-leche.blogspot.com/2010/03/google-devfest-2010.html参考: http://www.kmonos.net/wlog/88.html http://d.hatena.ne.jp/rubyco/20080719/equiv wikipedia:素集合データ構造 素集合データ構造(Union-Find)は、要素を同値類(素集合…

__name__を変更してもエラーは変わらない

デコレータを作るときなど、返り値の関数の.__name__ を設定する事をするわけですが(functools.wrapsでも__name__を変更している)、エラー時には意味がないという話 def some_fn(x): pass some_fn.__name__ = "a good name" f = some_fn f() # Traceback (mo…

pyreadlineをpython3.2で使う

pyreadlineはpython3xに未だ対応していないので、try&errorで適当に弄ってみました。相対importを明示的に書くべき所とか、bytesであるべき所がstrになっている所とか。pyreadline 1.5用patch当て方 $> cd C:\python32\Lib\site-packages\pyreadline $> patc…

PySideとPyQtの差異

を勝手に翻訳したものです。 APIの差異 importする名前の違い(PyQt4の代わりにPySide) PySideはライブラリ名がPyQtと違います。 from PyQt4.QtCore import * や、 import PyQt4.QtCore と書く代わりに、次のように書いてください。 from PySide.QtCore imp…

Pythonによるデザインパターン(目次)

これは『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)をPythonに翻訳してみようというシリーズです。Rubyによるデザインパターン作者: Russ Olsen,ラス・オルセン,小林健一,菅野裕,吉野雅人,山岸夢人,小島努出版社/メー…

QtのプロパティをPySideで使う

Using Qt Properties in PySideを翻訳。PySide は Property 関数を提供しており、 Pythonで書かれたgetter・setter関数を使って、 QtのプロパティとしてもPythonのプロパティとしてもふるまうようなプロパティを、 定義することが出来ます。以下は、Qtのプロ…

itertools.combinationsを無限長イテレータに対応させる

pythonのitertools.combinationsやitertools.permutationには無限長のイテレータを渡す事はできません。内部でイテレータをタプルに変換しようとするのでフリーズしてしまいます。無限長にも対応する、アルゴリズム自体は難しくはありません。そこで、python…

3つ以上の集合の直積を求めるプログラム

http://d.hatena.ne.jp/yagiey/20100705/1278340237 http://d.hatena.ne.jp/youkoso_guest/20081212/1229089595 に、直積を作る関数について書かれていたのですが、どちらも有限なlistに限定したものだったので、無限リストにも扱える関数を書いてみました。…

3つ以上の集合の直積を求めるプログラム その2

3つ以上の集合の直積を求めるプログラムをClojureで書いてみました。Python版では無限リストを扱う関係の部分でゴチャゴチャしていたのが、Clojureは無限リストを自然に扱えます。一方Clojureは状態変化が基本的に無いので、Python版は直訳は出来ません。clo…

Python 2.7のインストール

Python2.7が正式リリースされた記念に、パッケージのインストールをメモ。 自分が使うものだけをインストールするので、一般性は乏しいです。 Python2.7本体 http://www.python.org/download/releases/2.7/から、windowsの人はinstallerを、その他の環境の人…

treeコマンドを作る

Clojureの練習として、treeコマンドを作って・・・みようとしたのですが、 最初いきなりClojureで作ろうとして混乱してしまいました。 そこで、まず自分が使いなれたPythonでtreeを作ってみました。 実行例: $> python tree.py hello-clojure P:\\hello-clo…

イテレータを分割する

itertoolsには、Trueになる要素を返すifilterと、Falseになる要素を返すifilterfalseがありますが、ifilterとifilterfalseの両方を返す関数があったら便利じゃないか? (schemeやclojureなどにはあるようです)あるいは、True/Falseだけでなく、任意の値で…

Pythonから外部プログラムを起動

Python初心者の友人がバッチファイルの真似事をしようとして、Pythonで外部プログラムの呼び出しかたが分からず悩んでいました。自分自身も初心者のころつまった経験があるので、メモしておきます。 外部プログラムを扱う方法はたくさんある os (system, spa…

パフォーマンス計測のメモ

cProfileとpstats(ボトルネックの調査) 「実行経過のデータをファイルに出力 → データを読める形に出力」という手順で測定します。 実行経過のデータをファイルに出力するには、cProfileを使います。 #encoding:shift-jis # import profile # pure Python…

世間では、単に好きな曲のメドレーを作業用BGMと呼ぶらしいですが、私は曲の境目で集中力がそがれるタイプなので、1つの曲を1時間延々とループさせるwavを作ることにします。wavで出力するので、容量はバカでかくなります。 1. RadioLine Freeというソフト…

py2exeでiconを付ける

setup( options = {'py2exe': py2exe_options}, console = [dict( script = 'dw2.py', other_resources = [], icon_resources = [(0, "dw.ico")], #ここにアイコンを指定 )], data_files = [], zipfile = None )

PyQtでファイルのドラッグ&ドロップ

スクリプトのアイコンにファイルを大量にドラッグ&ドロップしようとすると、 エラーが出るので、ウィンドウを作ってそこにD&D;させるスクリプトを書いてみました。 #encoding:shift-jis from __future__ import division, with_statement, print_function i…

Convention over Configuration パターン (1)

『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次 Convention over Configuration パターン (1) Convention over Configuration パターン (2) "Convention over Configuration(Co…

Convention over Configuration パターン (2)

『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次 Convention over Configuration パターン (1) Convention over Configuration パターン (2) CoCで重要なのは、まず規約を良く練…

メタプログラミングパターン (1) 特異メソッド

『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次 メタプログラミングパターン (1) 特異メソッド メタプログラミングパターン (2) メソッドの自動定義 メタプログラミングは動的…

メタプログラミングパターン (2) メソッドの自動定義

『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次 メタプログラミングパターン (1) 特異メソッド メタプログラミングパターン (2) メソッドの自動定義 メソッドを自動的に定義す…

内部DSLパターン (1)

『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次 内部DSLパターン (1) 内部DSLパターン (2) ブロック 今回は、内部DSL(ドメイン特化言語)パターンです。 前回のInterpreterパ…

内部DSLパターン (2) ブロック

『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次 内部DSLパターン (1) 内部DSLパターン (2) ブロック Rubyが内部DSLに向いている一つの理由は、ブロック構文の存在です。 Python…