pythonは型ヒントを無視するのでこうなるしかないんですけど どうしてもオーバーロードするなら自分で型を判定する ていうかUnion型があるってことはもともとそういうものってことかな class Point: def __init__(self, x: Union[Tuple[float, float], float] = 0.0, y: float=0.0) -> None: if isinstance(x, tuple): self.x = x[0] self.y = x[1] else: self.x = x self.y = y mypyは通った 動かす $ python3 -i shape.py >>> Point() Point(0.0, 0.0) >>> Point(1.0,2.0) Point(1.0, 2.0) >>> Point((2.0,4.0)) Point(2.
今日は Single-dispatch generic functions (PEP-443)。Generic functionは汎用関数と訳されることも多いが、言語によって微妙に違う使われ方をしている。Pythonでは「引数の型によって動作が異なる複数の関数に同じ名前をつける」という意味合いで使われているようだ。 と書いてもさっぱりわからないので、例示。引数の型によって出力が異なる関数を考える。Generic functionsを使わないとこんな感じ。 def print_func(arg): arg_type = type(arg) if arg_type is int: print("found integer:", arg) elif arg_type is list: print("found list:", arg) else: print("found something:"
Python 3.4 added the ability to define function overloading with static methods. This is essentially the example from the documentation: from functools import singledispatch class TestClass(object): @singledispatch def test_method(arg, verbose=False): if verbose: print("Let me just say,", end=" ") print(arg) @test_method.register(int) def _(arg): print("Strength in numbers, eh?", end=" ") print(ar
はじめに Python で Memoize (Memoization / メモ化) する方法をお伝えします。 ※「Memoize」は「Memoization」や「メモ化」ともいいます。 Memoize とは Memoize とは、キャッシュを用いて関数呼び出しを高速化する手法のことです。関数呼び出し時の引数をキーとして戻り値をキャッシュし、同じ引数で呼び出された場合にキャッシュした値を返す (関数呼び出しを省略する) ことで高速化します。 Memoize の効果が高い場合 関数が以下の特徴を持つときは、Memoize することで大きな効果を期待できます。 関数が同じ引数で何度も呼び出される 関数呼び出し 1 回あたりのコストが高い (実行時間が長い) 例としてフィボナッチ数を求める再帰関数を定義します。引数 n の値が大きくなるほど、関数 fibonacci は同じ引数で何度も呼び出されま
を最初はRubyで書き始めたのだが、想像してたよりも面倒なことになりそうだった(mapとかinjectでできる?再帰が必要?)。 そんなとき、研究室の先輩にPythonを勧められたときに教えてもらった、リストの内包表記のことをふと思い出したわけである。 自分はPython使いではないので手間取るかと思ったが、かなりあっさりできてしまった。 せっかくだから(?)、最近リリースしたばかりらしいPython 3.0で動くように書き直してみた。 from functools import reduce # 直積を求める関数 def product(lists): return reduce( lambda prod, list: [x + [y] for x in prod for y in list], lists, [[]]) alphabets = ['A', 'B', 'C'] numbe
lru_cache lru_cacheは関数の引数と返り値を保存する。 from functools import lru_cache @lru_cache(maxsize=None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) 公式の例。再帰的にフィボナッチ数を計算していますが、そのまま実行すると呆れるほど遅いです。 実際、この関数にnを渡すと約 回ほどこの関数が呼び出されることなりますが、関数の引数としてそのほとんどが、過去渡されたことのある引数が繰り返し渡されることになります。 @lru_cacheを関数の前につければ、引数nに対する返り値を保存します。つまり同じ引数が2回以上渡されるときは、2回目以降は実際に関数の中身を計算することはありません。 上記の例だと、これにより関数が呼び出される回数が約 回に減少する
標準ライブラリのitertools, functools を拡張したライブラリであるtoolzを使ってみました。 インストール pipでインストールできます。 使い方 toolz により提供される関数は次の3つに大別されます。このうちItertoolz 、Functoolz は、それぞれitertools 、functools の拡張に相当する機能を提供します。 Itertoolz Functoolz Dicttoolz toolzはmap 、reduce 、filter など標準で使用できる関数も提供しています。これらをインポートするとmap であればitertools.imap のようにIterableを扱える関数に置き換えられます。これらの関数の使い方については元のものとほぼ同じなので割愛します。 以下、よく使いそうな関数を紹介していきます。 Itertoolz itertools
Pythonの関数�の部分適用を行うfunctools.partial、デコレータを書くときなどに使うfunctools.wrapsについて。 えーと、社内の有志でbottle.pyのソースコードリーディングをやったんだよね。んで、まぁ、functoolsの理解が弱くて読むのに詰まったので、一旦自分の理解としてまとめておく。デコレータとか普段自分で実装する機会あまりないので、そのあたりの理解を深めることができたのも収穫だった。やっぱ勉強会は少人数の方がいいね。やる気ある人だけで催すクローズドなやつがいい。全員発表ルールの。会員制クラブみてーなやつ(違うか)。 0. functoolsについて まず、functoolsとはなんなのか?という話なんだけど、公式を見てみると次のような記述がある。 9.8. functools — 高階関数と呼び出し可能オブジェクトの操作 バージョン 2.5 で追
はじめに Teto\Functoolszonuexe/php-functoolsは、数日前に「内部状態で頭がパンクして氏なないようにするには関数型言語がオススメ」との噂を真に受けて実装したライブラリだ。計画性のない人生でも、命は惜しい。 正直なところ僕には「関数型言語」が何を意味するのかよくわからないし、実際のところ単なる流行語に過ぎないと認識してるのだけれど、さしあたってPHPで「部分適用をしやすくしよう」を最初の目的に出発した。 このライブラリはイテレータ機能はカバーしないので、Underbar.phpとかGinqとか、好きなのを選べば良いと思ふ。この記事では特定のライブラリには依存せず、配列とPHP標準函数のarray_map, array_reduce, array_filterで説明する。 過去、いくつか関連のありそうな記事を書いたのだけれど、参考になるだろうか。 (たぶんならな
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く