yohhoyの日記

技術的メモをしていきたい日記

2015-03-01から1ヶ月間の記事一覧

ConcurrentHashMap computeIfAbsent再帰呼び出しはNG

Java8で導入された java.util.concurrent.ConcurrentHashMap#computeIfAbsent メソッドでは、computeIfAbsentメソッドから呼出される計算処理中から、再帰処理によって同ConcurrentHashMapオブジェクトのcomputeIfAbsentメソッドを再度呼び出してはならない…

リスト内包表記中のif-else構文

Pythonのリスト内包表記でif-else構文を使うときのメモ。ifのみとの記述場所の違いに注意。 a = [1, 2, 3, 4] [x for x in a if x < 2] # [3, 4] [x if x % 2 == 0 else 0 for x in a] # [0, 2, 0, 4] [x if x % 2 == 0 else 0 for x in a if 2 < x] # [0, 4…

mutexモジュールはマルチスレッド処理には使えない

2020-01-01をもって Python2はEOL を迎えている。Python 2.x系にある mutexモジュール は、(その名前に反して)マルチスレッド処理には使えない。同モジュールはPython 2.6以降で非推奨、Python 3系では削除された。代わりに threading.Lockオブジェクト を…

(翻訳)書籍"Effective Python" アイテム一覧

Brett Slatkin氏による書籍 "Effective Python: 59 Specific Ways to Write Better Python" より、アイテム一覧(目次)を抄訳。Python 2.x/3.x両バージョンを対象とする。 http://www.effectivepython.com/ http://www.informit.com/store/effective-pytho…

Windows環境でもPythonスクリプトshebangはちゃんと書く

Pythonスクリプトのshebang(1行目の#!)*1はWindows環境でも効果がある。Windows OSにPython 3.3以降を導入すると、C:\Windowsフォルダ以下にPythonランチャpy.exeがインストールされる。Python 2/3両バージョンがインストールされている場合、同ランチャ…

Double Brace Initializationイディオム

JavaコレクションやネストしたGUIコンポーネントを、1論理行っぽく初期化する方法。Double Brace Initializationイディオム(2重ブレース初期化)とも呼ばれる。 List<String> list = new ArrayList<String>() {{ add("foo"); add("bar"); add("zot"); }}; add(new JPanel() </string></string>…

キーワード引数の強制

Pythonの関数定義において、キーワード引数形式でのみ実引数を渡せる(keyword-only arguments)よう強制する方法。 # Python 3.x def f(a, b, *, x=None, y=None): print("a={} b={} x={} y={}".format(a, b, x, y)) f(1, 2) # OK: a=1 b=2 x=None y=None f(1…

自作デコレータの書き方

Pythonで自作のデコレータ(decorator)記述方法についてメモ。functoolsパッケージを利用すると、デコレータ式適用後にも元関数の__name__や__doc__を簡単に引き継げる。(汎用デコレータでなければ不要かもしれない) 引数無しデコレータ @my_deco def func(…

関数パラメータ型としてのauto?

gcc(g++) 4.9.0以降/gnu++1zモードでは、関数パラメータ型として auto キーワードを利用できる。これはC++1zに向けて提案されているConcepts Lite拡張の一部。2019-01-11追記:C++2a(C++20)言語仕様に向けて、abbreviated function template 構文を含むP114…