水島雄太のブログ

個人的かつ雑多なブログです。

Pythonのitems()とiteritems()の違い

Python2.xの辞書オブジェクトに対する組み込みメソッド、 items()はkeyとvalueをtupleに格納したlistを生成して返すのに対して、 iteritems()はイテレータを返す。

items()はいちいちリストを生成する分、オーバーヘッドがかかるので、 基本的にiteritemsを使ったほうが良いっぽい。

一方、イテレータはスライスが使えないので、 スライスで要素の範囲指定をしたいときは、items()で取ってこないといけない。

ただ、3.xではitems()もイテレータを返すようになり、iteritems()は廃止になったそうです。

参考: http://stackoverflow.com/questions/10458437/python-what-is-the-difference-between-dict-items-and-dict-iteritems

パーフェクトPython
パーフェクトPythonPythonサポーターズ

技術評論社 2014-10-31
売り上げランキング : 15928


Amazonで詳しく見る
by G-Tools
Pythonプロフェッショナルプログラミング 第2版
Pythonプロフェッショナルプログラミング 第2版株式会社ビープラウ

秀和システム 2015-02-28
売り上げランキング : 4750


Amazonで詳しく見る
by G-Tools

git rebase

  • git rebaseするときの注意点

git rebaseはbranchを切ってからのcommitを全て書き換えてしまう(ハッシュも違うものになる)ので、リモートブランチにpushしてから、git rebaseを行うと、そのままではpush出来ず、
間違えてpull してしまうと、同じ内容のコミットが別のコミットとして扱われ、同一の内容が重複してマージされてしまう。
とりあえず、

  1. 公開ブランチでは絶対にgit rebaseしない。
  2. pushに失敗したら、リモートとローカルのコミット履歴を確認した上で、git push -fを行う(確認をせずにpush -fを行わない。もし他の人がそのブランチにcommitしていた場合、最悪そのcommitが失われる。)
  3. git rebaseした後は、pushするまで絶対にpullは行わない

この位守っておけば、大失敗はしないかな?

何にせよ、git rebaseはgitの仕組みをちゃんと理解してないと危険だよな。