タグ

2015年2月28日のブックマーク (14件)

  • メソッド解決順序(MRO)

    多重継承が利用可能な言語では、メソッドを探索するときのベースクラスを探索する順序を、メソッド解決順序(MRO)と呼んでいる。Pythonではメソッドだけではなく、属性の探索でもこれが利用される。単一継承しかサポートしていない言語では、MROはとてもつまらない話題であるが、多重継承の場合には必要となってきて、MROアルゴリズムの選択が極めて難しい問題となりうる。Pythonでは、クラシック、Python 2.2の新スタイル、Python 2.3の新スタイル(C3とも呼ばれる)の3種類のMROアルゴリズムを持っていることが知られている。Python 3では、最後のアルゴリズムだけが生き残っている。 旧スタイルクラスはシンプルなMROの方式を利用していた。メソッドを探す場合には、シンプルに深さ優先探索を行って、ベースクラスの中で最初にマッチしたオブジェクトが返される。例えば、次のようなクラス構造

  • Pythonと型 〜 Docstring、関数アノテーション、型推論 〜 - Blank File

    動的型付言語であえて型を宣言する方式(Type Hinting or Optional Typing)、最近流行ってますね。 言語仕様としては DartTypeScript が採用していますし、Pythonでは 開発者のGuido氏が次期バージョン (3.5) での型アノテーションの導入を提案 しています。 Pythonで型アノテーションの導入って結構インパクトありそうですが、国内の情報がほとんどなかったので、実際どんなもんなのか、既存ツールで試せる範囲で試してみました。 そもそも、Python で型を使うと何が嬉しいのか、 Guido氏の提案メール から引用します。 Editors (IDEs) can benefit from type annotations Linters are an important tool for teams developing software

    Pythonと型 〜 Docstring、関数アノテーション、型推論 〜 - Blank File
  • 第7回 関数アノテーションでスマートにプラスアルファの実現 | gihyo.jp

    関数アノテーションとは 関数アノテーションとは関数の引数と戻り値に付加情報をつける機能です。PEP 3107 -- Function Annotationsで定義されていて、Python 2.6へbackportされていないので、利用するにはPython 3.0以降が必要になります。 まずは、インタラクティブシェルで関数アノテーションの例を見てみましょう。 >>> def foo(a: "a argument", b: int) -> ["return", "value"]: ... return a+b ... >>> help(foo) Help on function foo in module __main__: foo(a: 'a argument', b: int) -> ['return', 'value'] >>> foo.__annotations__ {'a': 'a

    第7回 関数アノテーションでスマートにプラスアルファの実現 | gihyo.jp
  • 27.9. atexit — 終了ハンドラ — Python 2.7ja1 documentation

    This document is for an old version of Python that is no longer supported. You should upgrade and read the Python documentation for the current stable release. Source code: Lib/atexit.py The atexit module defines a single function to register cleanup functions. Functions thus registered are automatically executed upon normal interpreter termination. atexit runs these functions in the reverse order

    hiroyukim
    hiroyukim 2015/02/28
  • Pythonのデコレータを理解するための12Step - Qiita

    古い記事なんですが, Pythonのデコレータの概念をつかむには良記事だったので和訳意訳してみました. http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/ Step1. 関数 これは基ですね. Pythonにおいて関数はdefキーワードにより関数名とパラメータのリスト(任意)とともに定義できます.また括弧付きで名前を指定することで実行できます. Step2. スコープ Pythonでは関数を作ると新しいスコープが作られます.言い方を変えるとそれぞれの関数がそれぞれに名前空間を持つということです. Pythonではこれらを確認することのできる組み込み関数も用意されていて, locals()で自身の持つローカルな名前空間の値を辞書形式で返却します.

    Pythonのデコレータを理解するための12Step - Qiita
  • 28.7. contextlib — Utilities for with-statement contexts — Python 2.7.18 documentation

    This document is for an old version of Python that is no longer supported. You should upgrade and read the Python documentation for the current stable release. Source code: Lib/contextlib.py This module provides utilities for common tasks involving the with statement. For more information see also Context Manager Types and With Statement Context Managers. Functions provided: contextlib.contextmana

    hiroyukim
    hiroyukim 2015/02/28
  • with文とコンテキストマネージャ型で遊ぶ @Python3

    恥ずかしながらwith文(コンテキストマネージャ型)の何たるかをよく知らぬまま使っていた。 ファイルを開くときにcloseメソッドを呼び出さなくても良いし、エラー処理をする手間も省けて便利~♪、てなくらいにしか認知してなかったのである。 しかしその質が、withステートメント内の処理に取り掛かる前の"下ごしらえ"と、処理が全て終わった後の"後始末"を自動的(強制的)に行うものである、と気付いたとき、すーっと目が開いた。 ただ、そういった型(クラス)をどのようにすれば作れるのか分からぬ。 が、分からぬ事は恥ずかしくない。調べればいいだけだ。 参考) 4. 組み込み型 ― Python 3.3 documentation(4.11. コンテキストマネージャ型) http://docs.python.jp/3.3/library/stdtypes.html#typecontextmanager

    hiroyukim
    hiroyukim 2015/02/28
  • Python のコンテキストマネージャと with ブロック

    コンテキストマネージャ (context manager) を with ブロックを組み合わせて使うことによって、ファイルやロックなどのリソースの解放を行なうコードを簡便に実装できるようになります。 ここではコンテキストマネージャの具体的な仕組みと、実装方法について説明します。 コンテキストマネージャの仕組み コンテキストマネージャを定義するには、__enter__ メソッドと __exit__ メソッドを実装します。 コンテキストマネージャが生成されるときに、__enter__ が呼ばれ、with ブロックによって定義されたコンテキストから抜けるときに __exit__ メソッドが呼ばれます。 裏で例外処理 (try..catch..finally) を利用しており、コンテキストから抜けるときに、__exit__ メソッドが確実に呼ばれます。 コンテキストマネージャの利用用途 コンテキス

    Python のコンテキストマネージャと with ブロック
    hiroyukim
    hiroyukim 2015/02/28
  • 高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development

    先日、TimSortというソートアルゴリズムが話題になりました。TimSortは、高速な安定ソートで、Python(>=2.3)やJava SE 7、およびAndroidでの標準ソートアルゴリズムとして採用されているそうです。 C++のstd::sort()よりも高速であるというベンチマーク結果1が話題になり(後にベンチマークの誤りと判明)、私もそれで存在を知りました。実際のところ、ランダムなデータに対してはクイックソート(IntroSort)ほど速くないようですが、ソートというシンプルなタスクのアルゴリズムが今もなお改良され続けていて、なおかつ人々の関心を引くというのは興味深いものです。 しかしながら、オリジナルのTimSortのコードは若干複雑で、実際のところどういうアルゴリズムなのかわかりづらいところがあると思います。そこで今回はTimSortのアルゴリズムをできるだけわかりやすく解

    高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development
  • コーディング規約について - (ヽ´ω`) 

    コンピュータ言語にはコーディング規約という、コードを書くときのルールのようなものがあります。 割とそういうものがあること自体は知られているのですが、自分自身はPerlのPBPが出たときに読んだぐらいで実際には、公開されている割とメジャーなソースコード基準で書いていたところもありそこまで気にしてませんでした。他言語やるときも言語学習を意識していたので真面目に参照してなかったんですが、思うところあって調べてみました。とりあえず気になる言語のStyleGuidを集めてみました。規約がかっちりしてる言語はこの辺にしたがっておいたほうが無難かと思われます。 この辺に準拠するメリットとしては、大規模開発において可読性を上げる。という点が大きいとは思います。可読性を上げることによって保守性があがるわけです。ただ、あくまでGuideであり規約でしかないので徹底されづらい気はしてます。goとかそうですけど言

    コーディング規約について - (ヽ´ω`) 
    hiroyukim
    hiroyukim 2015/02/28
  • Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc) | yunabe.jp

    Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc) Python のパッケージ管理関係の情報がオフィシャルには整理されてなく、 またパッケージ管理まわりででてくるキーワードもいくつもあって分かり難いので完結にまとめてみました。 このドキュメント自体は少し長いですが、結論としては2015年1月時点では 原則 pip を使ってパッケージの管理を行う setuptools も広く使われているので入れておくとよい。そもそも pip のインストール時に自動的ににインストールされる distribute は 2013年に setuptools にマージされたので不要 という方針でよいと思います。 ただ少し古い情報ソースやパッケージのドキュメントを読んでいると distribute の利用が勧められていたり、 site-packages, e

  • Python のコーディング規約 PEP8 に準拠する - Qiita

    この Qiita の連載記事ではデータ分析のための主要言語として Python を利用してきました。ところでみなさんは Python のコーディング規約 PEP8 をご存知でしょうか。 ソースコードスタイルガイド PEP8 ソースコードは一般に「書かれる時間」よりも「読まれる時間」の方が長い、そのような事実に基づいて、「スタイルを統一し読みやすいコードを書こう」というアイデアのもとに作られたのがこのガイドです。 Style Guide for Python Code http://legacy.python.org/dev/peps/pep-0008/ 家は当然ながら英語ですが有志の方が日語に翻訳してくださっています。 PEP8 日語訳 https://github.com/mumumu/pep8-ja どちらにせよ Python を利用する方は必ず一読するべきかと思います。 自動的

    Python のコーディング規約 PEP8 に準拠する - Qiita
  • PEP 8 – Style Guide for Python Code | peps.python.org

    PEP 8 – Style Guide for Python Code Author: Guido van Rossum <guido at python.org>, Barry Warsaw <barry at python.org>, Alyssa Coghlan <ncoghlan at gmail.com> Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Contents Introduction A Foolish Consistency is the Hobgoblin of Little Minds Code Lay-out Indentation Tabs or Spaces? Maximum Line Length Shoul

    PEP 8 – Style Guide for Python Code | peps.python.org
  • PEP 0 – Index of Python Enhancement Proposals (PEPs) | peps.python.org

    Python » PEP Index » PEP 0 Toggle light / dark / auto colour theme PEP 0 – Index of Python Enhancement Proposals (PEPs) Author: The PEP Editors Status: Active Type: Informational Created: 13-Jul-2000 Table of Contents Introduction Topics API Index by Category Meta-PEPs (PEPs about PEPs or Processes) Other Informational PEPs Provisional PEPs (provisionally accepted; interface may still change) Acce

    PEP 0 – Index of Python Enhancement Proposals (PEPs) | peps.python.org