並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 196件

新着順 人気順

atsuoishimotoの検索結果1 - 40 件 / 196件

  • 他の言語に慣れた人がPythonを使ったときにつまずきがちな10のポイント - 西尾泰和のはてなダイアリー

    今日質問されて、以前Twitterで書いたのを思い出して、そして検索性が悪くて見つけ出すのに苦労した。こちらに転載しておく。詳細は気が向いたときに埋める。 オプション引数の評価タイミング Rubyではオプション引数は関数が呼ばれるたびに評価される。 def foo() print "foo!" end def bar(x=foo()) end bar #=> foo! と出力される bar #=> foo! bar #=> foo! Pythonでは関数の定義時に1回だけ評価される。 def foo(): print "foo!" def bar(x=foo()): pass #=> foo!と出力される bar() #=> 何も出力されない bar() 「引数が省略されたら今の日時」みたいな毎回評価したい場合はデフォルト値をNoneにしておいて「Noneだったら=省略されていたら」のif

      他の言語に慣れた人がPythonを使ったときにつまずきがちな10のポイント - 西尾泰和のはてなダイアリー
    • Pythonのfor文は遅い? - atsuoishimoto's diary

      bicycle1885.hatenablog.com こちらの記事を拝見していて、ちょっと気になったので注釈。 PythonやRを使っている人で、ある程度重い計算をする人達には半ば常識になっていることとして、いわゆる「for文を使ってはいけない。ベクトル化*1しろ。」という助言があります。 これは、PythonやRのようなインタープリター方式の処理系をもつ言語では、極めてfor文が遅いため、C言語やFortranで実装されたベクトル化計算を使うほうが速いという意味です。 昔からよくこういう言い方がよくされるが、本当にPythonのfor文は遅いのだろうか。 聞くところによるとRのfor文はガチで遅いそうだが、Pythonの計算が遅いのはインタープリタ方式だからでも、for文が遅いからでもない。もちろん、Pythonはインタープリタなので遅いし、for文だって極めて遅い。しかし、これはPyt

        Pythonのfor文は遅い? - atsuoishimoto's diary
      • Python 3.8 の概要 (その1) - Assignment expressions - atsuoishimoto's diary

        古来、Pythonでは「代入は文であるべき!」と一貫して主張してきました。 C言語などでは、代入は足し算や掛け算と同じ、値を計算する「式」で、たとえば a = (b=100) / 2; と書くと、b には 100 を代入し、a に 100/2=50 を代入します。1+1 は 2 という値になる 式 ですが、b=100 も同様に値が 100 となる 式 なのです。 Pythonでは、代入は式ではないので、こういう書き方はできません。 Pythonの代入は、足し算などの演算子の仲間ではなく、if や for のような制御文の仲間で、あまり自由な書き方は出来ないのです。 Python FAQ では、その理由として Python の式中での代入を許さない理由は、この構造によって起こる、他の言語ではありがちで見つけづらいバグです: if (x = 0) { // error handling } e

          Python 3.8 の概要 (その1) - Assignment expressions - atsuoishimoto's diary
        • http://www.gembook.org/ages_of_python2.html

          • パーフェクトPython - forest book

            Python3 に特化した専門書という位置付けですが、(Python3 に関した) 言語仕様やその変更、ライブラリの詳細の違いなどを除けば、Python2 でも活用できる知識が大半です。まだ Python2 しか使っていないという方でも十分に役立つ内容だと思います。 ただ、本書を読み進める上で1つだけ忘れてはいけないことがあります。Python 全般について丁寧に解説されていますが 著者名が Python サポーターズとなっていますが、ついったーなんかでは Python モヒカンズなんて言われています。 パーフェクト Python の執筆に参加しました — プログラマのネタ帳 二冊目 と何だかこわい人たちが書いた本だということです。まずはそのことを念頭におくことで本書を楽しんで読み進められる心の準備が整った、言い換えると、覚悟はできたと言えます。そうすれば、途中でこわくなってきても勇気をも

              パーフェクトPython - forest book
            • UnicodeDecodeError/UnicodeEncodeErrorに悩まないPython 2.x プログラミング - atsuoishimoto's diary

              最近、ときどきTwitterで「Python」を検索して眺めていたのだが、Pythonの分かりにくいところとして「UnicodeDecodeErrorが出てうざい」という不満をよく見かけるようだ。 確かに、Pythonでは、数字やアルファベット以外のユニコード文字を使おうとすると、対応する処理を書かなければUnicodeEncodeErrorやUnicodeDecodeErrorが出てしまう。Python3では色々改善されているのだが、Python2では分かりにくい点も多い。 このUnicodeDecodeErrorを見て、「Pythonは日本語が苦手だ」と考えてしまう人も多いだろう。確かにそう思ってしまっても仕方がないが、それは正しくない。日本人だけでなく、アメリカ人でもフランス人でもドイツ人でも、ユニコードを使う時はみんな等しく平等にこのエラーを出しているのである。 もちろん、慣れてし

                UnicodeDecodeError/UnicodeEncodeErrorに悩まないPython 2.x プログラミング - atsuoishimoto's diary
              • Shibu's Diary: Pythonはなぜ?str.join(seq)なのか?

                渋日記@shibu.jp 渋川よしきの日記です。ソフトウェア開発とか、ライフハックを中心に記事を書いていきます。 PythonのAPI設計の中で、たまに思い出したように話題が出てくるのが、配列に入った文字列を結合するメソッド。Pythonではstr.join(iterable)です。他の言語(僕がよく知っているRubyとJavaScript)はArray.join(String)となっています。どちらでもありえる話ですが、個人的にはPythonの方が自然だな、と感じていました。ですが、他の言語の方がいいという人も多く、Pythonプログラマーの中でも好き嫌いが出たりもします。せっかく、弾さんがPerlの国からやってきて適度にガソリンをまいて炎上したところなので、Pythonの歴史を紐解いてみました。 軽くjoinの歴史について語っているサイトはないか探してみる 軽くぐぐってみると、何箇所か

                • プログラミングを学んでみたい人に - atsuoishimoto's diary

                  Twitterなんかをいろいろ眺めていると、もどかしくってたまらなくなってしまうことがある。プログラミングをやってみたいな〜と思いながらも、いつまでも最初の一歩を踏み出せない、そんな人を見たときだ。踏み出してはみたものの、自分の進路に自信を持てなくて先に進めなくなっている人も多い。見かけるたびに、もどかしさのあまり身もだえしている。 世の中にはいろんな技術があるが、プログラミングという技術はダントツに入門しやすい部類だ。必要な設備はパソコン一台だけだし、数学の知識も最低限で問題ないし、肉体的な鍛錬も必要ない。勘の良い人なら、1週間もあればそこそこ基礎を学べてしまう。その程度の勉強でも、それなりに実用的なプログラムを書けたりするのだ。まずは始めてみようよ、といつも思う。 実際にプログラミングを始められない理由として、最初に学ぶプログラミング言語の選択に迷っている人は多いみたいだ。確かに色々な

                    プログラミングを学んでみたい人に - atsuoishimoto's diary
                  • Pythonバージョンの選びかた - atsuoishimoto's diary

                    Pythonはおよそ18ヶ月ごとに新しいメジャーバージョンをリリースする慣習になっていて、これまでにたくさんのバージョンがリリースされ、広く利用されてきた。Pythonの開発では後方互換性を保つことが非常に重視されていて、通常のアプリケーションであれば、Pythonのアップデートで動かなくなってしまうことはあまりない。アプリケーションが今後廃止される予定になっている機能を利用していると、DeprecationWarningという警告が出力されてしまう程度だ。 DeprecationWarningが出るようになってから実際に廃止されるまで少なくとも数年間はあるので、普通はその間にのんびり対処する事ができる。また、いったん廃止予定と決定されても、その機能が一部で使い続けられている場合には実際には削除されない、というケースも非常に多い。Pythonのドキュメントを見てみると、もう10年も前から廃

                      Pythonバージョンの選びかた - atsuoishimoto's diary
                    • あなたの知らないPythonのひみつ - atsuoishimoto's diary

                      Pythonでは、ループ・try・withブロックは最大20までしかネストできない。 >>> def spam(): ... while 1: ... while 2: ... while 3: ... while 4: ... while 5: ... while 6: ... while 7: ... while 8: ... while 9: ... while 10: ... while 11: ... while 12: ... while 13: ... while 14: ... while 15: ... while 16: ... while 17: ... while 18: ... while 19: ... while 20: ... while 21: ... print "Deep!" ... SystemError: too many statically n

                        あなたの知らないPythonのひみつ - atsuoishimoto's diary
                      • The Zen of Python 解題 - 前編 - atsuoishimoto's diary

                        The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In

                          The Zen of Python 解題 - 前編 - atsuoishimoto's diary
                        • Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - atsuoishimoto's diary

                          アプリケーションを作成して配布するとき、配布するのは複数のファイルやディレクトリではなく、ファイル一つだけで済ませることができたらそれに越したことはないだろう。Pythonには cx_Freeze や py2exe のような、プラットフォーム固有な実行可能ファイルを開発するための環境も揃っているが、ここではもうちょっとライトに、Pythonの実行環境があれば実行できる zip ファイルの作り方を紹介したい。例として、flaskを使った簡単なWebアプリケーションを作ってみよう。 尚、ここで作成したファイルは https://github.com/atsuoishimoto/demo_pkgrsrc に置いてあるのでご参照いただきたい。 リソースファイルの使い方 普通、アプリケーションにはスクリプトファイル以外にいろんなファイルが含まれる。この例のようなWebアプリケーションではHTMLやC

                            Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - atsuoishimoto's diary
                          • 今すぐフォローすべき各界のスーパーエンジニアまとめ - アインシュタインの電話番号

                            最近流行ってる今すぐフォローすべきスーパーエンジニアの各界(Node.js, Perl, Python, PHP, Ruby)のリストを勝手にまとめてみた。 元記事を見てね 以下のリスト元となっている各記事では、 なぜこのスーパーエンジニアな人達をリストアップしたのか その人達の書いたどんなブログ記事がオススメか どんなフレームワークやライブラリに精通しているか どんな分野のコミッターなのか などが紹介されていますので、元記事をご覧になった上でこちらのフォロー用リンクをご利用ください。また、下記でリストアップされているご本人でリストから外して欲しい方や、リンクなどに間違いがあれば教えてもらえると嬉しいです。 Node.js 今すぐフォローすべきnode.js界のスーパーエンジニア - 大人になったら肺呼吸 @meso @sugyan @dameninngenn @bad_at_math @

                              今すぐフォローすべき各界のスーパーエンジニアまとめ - アインシュタインの電話番号
                            • docs.python.jpでのドキュメント公開終了 - atsuoishimoto's diary

                              これまで、python.jpではPythonの日本語ドキュメントを公開してきたが、この度、ドキュメントのホスティングを終了し、docs.python.org へのリダイレクトのみをおこなうようになった。 www.python.jp 実に喜ばしいことである。これまで、日本語ドキュメントは python.jp においてある私家版でしかなかったが、python.orgで公開されることで、一定の公式っぽさを得ることができる。 また、python.jpは私が一人でほそぼそと、さくらインターネットの一番安いVPSで管理運用してきた。しかし、これからはPython本家の運用チームできっちり運用していただけるのである。 別に難しいことをしていたわけではないが、python.jp運営のプレッシャーはちょっとしたものだった。ここ近年のPythonブームも、私がちょっとしくじってドキュメントを参照できなくなる、

                                docs.python.jpでのドキュメント公開終了 - atsuoishimoto's diary
                              • Python.jp SlackからDiscordへ - atsuoishimoto's diary

                                これまで、python.jp ではSlackチームを用意していたが、こちらの利用は取り止めて、Discord に移行することにした。 書き込みはそれほどなかったものの、Python.jpチームには、約1000アカウントが登録されていた。そこそこな規模だろう。Slack->Discordへの大規模な移行としては Reactチーム の例があるが、こちらは別に Slack からなにかの制限を受けたというわけではない。 では、なぜDiscordに移行するかといえば、Slackというのはやはりオープンなコミュニティのチャットツールとしてはイマイチだと思うからだ。ReactさんのBlog にあるように、Slackのユーザ登録は面倒だし、複数のチームに所属する場合はそれぞれのチームでいちいちログインしなければならない。コミュニティ用のツールではないので特定ユーザのミュートやBanなどの機能もない。 また

                                  Python.jp SlackからDiscordへ - atsuoishimoto's diary
                                • とりあえずやってみよう、という話 - YAMAGUCHI::weblog

                                  はじめに 新卒準備カレンダー2011春の企画が上がったので考えるより先にATNDでイベント立てました。予想外にご参加いただきあっという間に「3月分の」*1枠が埋まってしまい、正直驚いている次第です。 昨日が初日でしたが、早速 @shibukawa が素晴らしいエントリを書いてくださいました。そこから受けて今日僕が書くというのはいささか申し訳ない気がしますが、普通の人の話も書いたほうが後続の人も気が楽になると思うので、気楽に書いていきます。あと渋川さんみたいに客観的な文体にできればいいんですが、文章力の問題で自分語りしか書けません。ご容赦ください。 お前、誰よ? いわゆる「Python界の情弱」です。2008年に大学院を卒業してから現職の会社に入社して、今年で社会人3年目になります。*2 id:sugyanのようにドラマチックな過去があればもうちょっと盛り上げられたんですが、学生の頃はC++

                                    とりあえずやってみよう、という話 - YAMAGUCHI::weblog
                                  • 「Python Hack-a-thon 2010.07」レポート | gihyo.jp

                                    Pythonハッカソンは、Djangoハッカソン(8回まで開催)から引き継がれる形で開催されている勉強会です。7月10日、オラクル青山センターにて、4回目の勉強会「Python Hack-a-thon 2010.07」が開催されました。 Pythonと銘打っていますが、Pythonに限定しない話題も数多く登場します。今回も、Ocaml, C++(?), PHPなどについてのプレゼンもありました。初心者から上級者まで評判が良く、リピート率も高いイベントです。とにかく人気で、とくにここ数回は100人以上の規模での募集にも関わらず、申し込み後すぐにいっぱいになってしまう盛況ぶりです。 Pythonハッカソンは、ハッカソン、ハンズオン、プレゼンテーションの3つのパートで構成されています。本稿では、これらのパートごとに、今回の勉強会についてレポートします。 Note: もともとは、Pythonのウェ

                                      「Python Hack-a-thon 2010.07」レポート | gihyo.jp
                                    • 今すぐフォローすべきPython界のスーパーエンジニア - ANS-prog

                                      PyCon JP 2011 8月27日(土) 9:30~17:10 (仮) 産業技術大学院大学 (品川シーサイド駅から徒歩3分) Call for Papers:演題募集中 情弱なので、フォローして是非情強になりたいです。 Armin Ronacher (@mitsuhiko) Ian Bicking (@ianbicking) Michael Foord (@voidspace) Bob Ippolito (@etrepum) Atsuo Ishimoto (@atsuoishimoto) Yutaka Matsubara (@mopemope) Takayuki Shimizukawa (@shimizukawa) Moriyoshi Koizumi (@moriyoshit) Yasushi Masuda (@whosaysni) Atsushi Odagiri (@aodag

                                      • mockはこう使え - atsuoishimoto's diary

                                        最近、Mockライブラリ http://www.voidspace.org.uk/python/mock/ を使ってみたのでメモ。 このライブラリは、その性質上、動的にメソッドや属性を作成するケースが多く、普通のPythonライブラリのようにイントロスペクションに頼って使い方を調べるのは難しい。本気で使うならまじめにドキュメントを読み込む必要がある。 関数の置き換え テスト中に呼び出される関数をMockで置き換える例。ここでは、関数 myapp.utils.func1() を置き換える。 from mock import Mock import myapp.utils # myapp.utils.func1 を、常に100を返す関数に置き換える myapp.utils.func1 = Mock(return_value=100) 戻り値が定数でない場合は、Mock()にside_effec

                                          mockはこう使え - atsuoishimoto's diary
                                        • Python3用パッケージってどのぐらい増えただろ? - atsuoishimoto's diary

                                          Python3を使ってても、PyPIのパッケージがPython3対応かどうか、あんまり心配しなくなった気がする今日このごろです。 体感的にはPython3であまり不自由はない感じになってきたが、実際問題、どの程度Python3対応が進んでいるのか、気になったので簡単に調べてみた。 PyPIの情報は xmlrpcインターフェース で簡単に取得できる。あまり速くないので、全件取得するとかなり時間がかかるが。。。 最新パッケージの情報を取得し、Programming Language として Python 3 を明記しているパッケージの件数をカウントした。もちろん、メタ情報を記述していないパッケージもあるので誤差はあるが、それほど多くはないだろう。 で、2016年6月18日時点でダウンロード可能なパッケージ数は 70524件。そのうち、Python 3 と明示的に表記しているパッケージは。。。

                                            Python3用パッケージってどのぐらい増えただろ? - atsuoishimoto's diary
                                          • Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary

                                            昨日公開した Pythonのガベージコレクション にこんな突っ込みをいただいた。 マークアンドスイープGCじゃないそうです PythonのGarbageCollection http://www.narihiro.info/translate/garbage_collection_for_python_jp.html 確かに、Pythonで使用しているのは教科書で言うマーク&スイープとは異なるアルゴリズムである。上記のページにあるように、いわゆるマーク&スイープは、ルートオブジェクトと呼ばれる生きていることが確実なオブジェクトを見つけ出し、そこから参照されているオブジェクトをどんどん探り出して、最終的に誰からも参照されていないオブジェクトをあぶり出すというものだ。Pythonではルートからオブジェクトを探すというアプローチを取っておらず、私も会場の説明では「マークアンドスイープの一種」のよ

                                              Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary
                                            • Python2のstrは死んだ - atsuoishimoto's diary

                                              Python3の概略をざっと聞くと、Python3ではPython2のユニコード型が文字列型になり、文字列型はバイト文字列型になった、というイメージを持ってしまう人も多いだろう。Python2の s="spamspamspam" は、Python3の s=b"spamspamspam" と同じだ、と。 しかし、Python3に"バイト文字列"なんて存在しない。あるのは "bytes"だ。複数形を示す "s"に注意しよう。bytesはバイトのコンテナであり、バイトとは整数値だ。バイトは文字ですらないのだ。 そう、だからもう認めよう。Python2のstrは死んだ。Python3にはもう存在しない。strは消え去った。お亡くなりになった。お隠れになった。成仏した。主の御許に召された。バージョン履歴に残るゴミクズとなった。その生涯は幕を閉じ、アンコールに応じることもないのである。 strとbyt

                                                Python2のstrは死んだ - atsuoishimoto's diary
                                              • The Zen of Python 解題 - 後編 - atsuoishimoto's diary

                                                The Zen of Python 解題 - 前編 "The Zen of Python" の役割 "The Zen of Python" は Tim Peters氏が1999年に「Pythonらしさとはなにか?」と問われて書き上げたものであることは前述した。Python 2.0 のリリースに向けて活発に開発が進められていたころである。 この Python 2.0 は、いろいろな意味で重要なリリースだ。まず、Python の著作権の帰属、ライセンス等について数々の「大人の話し合い」をくぐり抜け、現在の PSF (Python Software Foundation) による安定した体制を築き上げる第一歩となった、記念すべきリリースである。 また、このリリースでは リスト内包(例 [x*x for x in range(10)]) や累積代入文(例 a += 10) などの Python 文

                                                  The Zen of Python 解題 - 後編 - atsuoishimoto's diary
                                                • Python.jp Discordサーバ雑感 - atsuoishimoto's diary

                                                  Python.jp Discordサーバ の運用を本格的に開始してから半年以上経ったので、感想など。 ユーザ層 Pythonのユーザ層いうとビジネス層というか、おっちゃんが多いイメージがあるのだか、Discordというゲームで広く使われているシステムなためか、アクティブな参加者は若年層・学生が多いようだ。Discordの利用規約で禁止されている小学生の存在が発覚して、ご退去いただいたこともある。 Discord bot また、プログラマやプログラマ希望者だけではなく、単にDiscordをチャットとして利用している人たちも多い。こういう人たちはプログラミングの知識はあまりないが、ゲームを楽しく遊ぶためのツールとして、Discordにいろんなbotを入れて活用している。そのうち、出来合いのbotでは満足できなくなって、自分なりのbotを作りたくなってきた人たちだ。 私は、この「Discord

                                                    Python.jp Discordサーバ雑感 - atsuoishimoto's diary
                                                  • Pythonで学ぶ「詳解 UNIXプログラミング」(その0) - atsuoishimoto's diary

                                                    お勧めのUNIXプログラミングの入門書は?と聞かれれば誰もが挙げるであろう名著 W.リチャード スティーヴンスの詳解 UNIXプログラミング(APUE)。必読書と言っても良いだろう。 "Pythonで学ぶ「詳解 UNIXプログラミング」"シリーズのエントリでは、私自身の復習もかねて、APUEで解説されているサンプルを、Pythonで実装してみたい。 以降の解説では、特に断り書きのない限り ピアソン・エデュケーション社出版の詳解 UNIXプログラミング 新装版をもとに、Ubuntu Linux 10.10上のPython2.7を対象に解説する。他のUNIX/Linuxや異なるバージョンのPythonであっても、ほとんどそのまま流用できるはずだ。 サンプルコードの背景などの解説は行わないので、かならず「詳解 UNIXプログラミング」とあわせて読んでいただきたい。 ところで、APUEの第2版が2

                                                      Pythonで学ぶ「詳解 UNIXプログラミング」(その0) - atsuoishimoto's diary
                                                    • Pythonで学ぶ「詳解 UNIXプログラミング」(その1) 第1章 概論 - atsuoishimoto's diary

                                                      1.1 ディレクトリ内の全てのファイルをリストする import sys, os if len(sys.argv) != 2: sys.exit("a single argument (the directory name) is required") try: filenames = os.listdir(sys.argv[1]) except OSError: sys.exit("can't open {0}".format(sys.argv[1])) for filename in filenames: print filename sys.exit(0) Pythonでは、opendir()/readdir()/closedir()を個別に呼び出す必要はなく、os.listdir()だけでファイル一覧を取得することができる。ただし、readdir()と違って、os.listdir(

                                                        Pythonで学ぶ「詳解 UNIXプログラミング」(その1) 第1章 概論 - atsuoishimoto's diary
                                                      • Python 3.8 の概要 (その5) - デバッグ用 f文字列フォーマット - atsuoishimoto's diary

                                                        Python3.8の新機能で、これ一番好きかも。このためだけにPython3.8必須にしてもいい。 通常、 f文字列 に変数名や式を指定すると、その値が文字列に埋め込まれます。 >>> foo, bar = 10, 20 >>> print(f'value is {foo+bar}') value is 30 便利な機能ですが、デバッグ用にデータを出力するときには、ちょっと面倒です。たとえば foo と bar の値を確認するときは、確認したい変数名のテキストと、表示したい式を別々に書く必要があります。 >>> print(f'foo={foo} bar={bar} foo+bar={foo+bar}') foo=10 bar=20 foo+bar=30 そこで、f文字列に出力指定方法が追加され、出力したい式に続けて = を指定すると、その式と式の値の両方が文字列に埋め込まれるようになりま

                                                          Python 3.8 の概要 (その5) - デバッグ用 f文字列フォーマット - atsuoishimoto's diary
                                                        • 僕たちPythonistaは、プログラミングに、Excelを使います! - atsuoishimoto's diary

                                                          みんな、Excel使ってますか!?もちろん使ってますね!?休暇届も、作業日報も、見積書も、スケジュール表も、みーんなExcelですね!? もちろん、プログラミングだってExcelですね!? 当然です!みんなそうやって仕事してるんです! Excel版のTwitter公式クライアントはまだリリースされないんでしょうか!? だけど、Excelでコーディングしてると、ときどきちょっとだけ不便に感じることがありますね!いちいちテキストファイルに落としてから実行しなければならないからです!テキストファイルなんて低級なフォーマットには関わりたくないですね! でもPythonなら!Pythonなら大丈夫!Pythonなら直接Excelファイルを実行できます!Pythonにはパッケージの配布フォーマットとしてeggという形式が普及していますが、eggはもう古いですね! これからはxls形式を使いましょう!x

                                                            僕たちPythonistaは、プログラミングに、Excelを使います! - atsuoishimoto's diary
                                                          • Python高速化テクニック - atsuoishimoto's diary

                                                            ここ2〜3日、InfoPileのパフォーマンスチューニングをしており、ちょっともたつきを感じるような部分をほとんど解消することができた。InfoPileで使用した高速化テクニックの中で効果が大きく、よくつかわれそうなものを紹介しよう。尚、以下のスクリプトはPython 2.6.4で実行した。 listよりtupleを使う 可変長である必要のないシーケンスは、できるだけlistではなくtupleを使って構築しよう。listの生成/解放コストは意外と大きいのだ。 import time def run1(): for i in xrange(1000000): [i, i+1, i+2, i+3, i+4, i+5, i+6, i+7, i+8] def run2(): for i in xrange(1000000): (i, i+1, i+2, i+3, i+4, i+5, i+6, i+

                                                              Python高速化テクニック - atsuoishimoto's diary
                                                            • 移植性の高い Python スクリプトを書く - ny23の日記

                                                              以前 Lua の処理系 LuaJIT が速くて羨ましいという話を書いたが,最近は Python でも JIT コンパイラ PyPy の性能向上が著しいようだ.どれぐらい速いかというと,以前実験した PA-I(機械学習)で LuaJIT での実行速度を上回るぐらい*1.Python はもともとスクリプト言語の中では実行速度が速い方だったが,PyPy の急速な性能向上によって Perl や Ruby といった競合言語に対して(実行速度の点で)差を広げつつあるようだ. そういうわけで,最近スクリプトを Python で書く機会が増えている.Python でコードを書く上でやっかいなのは(まともな)ワンライナーが書けないこと*2と,(処理系のバラつきに起因する)移植性の問題である.前者はどうにもならないので,perl / ruby / sed + awk などで回避することになるが,後者は公開する

                                                                移植性の高い Python スクリプトを書く - ny23の日記
                                                              • Python 3.6における『Effective Python』 項目33はこう変わる - 何かを書き留める何か

                                                                項目33「サブクラスをメタクラスで検証する」はこう書き換わる Python 3.6がリリースされた。 Python 3.6で導入された新機能の一つに__init_subclass__がある。 PEP 487 -- Simpler customisation of class creation | Python.org か石本さんのエントリを参照してほしい。 atsuoishimoto.hatenablog.com 『Effective Python』の項目33「サブクラスをメタクラスで検証する」ではメタクラスを使ってサブクラスの検証(値の整合性チェックなど)を行うテクニックが解説されている。 多角形のクラスを定義する際に、頂点数が3未満の場合はValueErrorを送出する、というサンプルがある。 class ValidatePolygon(type): def __new__(meta,

                                                                  Python 3.6における『Effective Python』 項目33はこう変わる - 何かを書き留める何か
                                                                • スレッドの(というか並行処理の)歴史 - 西尾泰和のはてなダイアリー

                                                                  Twitterから転載 ふとスレッドっていつ発明されたんだろうと調べてみたけどよくわからない。Linuxがカーネルスレッドをサポートしたのが2.6からで2003年とか意外と新しい??もちろんユーザレベルのスレッドはもっと古いんだろうけど、いつからだろう。 hideaki_t: NeXTSTEP(Mach 2.0?)にはcthreadがありました。 atsuoishimoto: 私がスレッドって用語初めて聞いたのは、たしか'90年代初頭のOS/2だったかなぁ? これが2004年の話か>NetBSD 2.x+, and DragonFly BSD implement LWPs as kernel threads (1:1 model) shidocchi: 私は院の研究室でMachのソースリーディングをやってた頃知った。 これが2001年 > October 2, 2001 Mac OS X

                                                                    スレッドの(というか並行処理の)歴史 - 西尾泰和のはてなダイアリー
                                                                  • Pythonの粗大ゴミ - atsuoishimoto's diary

                                                                    なんかgcネタが続いてしまうが、先日のPython Hack-a-thon で発表した中で、「ジェネレータオブジェクトが解放されない場合がある」というのは、あまり知られていないようだ。Python公式ドキュメントを確認してみると、どうやらこちらにも書かれていない。知らないとハマってしまう場合もあるので、もうちょっと詳しく解説しておこう。 ガベージコレクションで解放されないオブジェクト まず、ちょっと復習しておこう。Pythonのガベージコレクション機構では、__del__() メソッドを持ったオブジェクトで循環参照を作ってしまうと、そのオブジェクトは自動的には解放されなくなってしまう。 例えば、次のように __del__() メソッドを持つクラスを定義する。 class UnCollectable: "__del__()メソッド付きクラス" def __del__(self): print

                                                                      Pythonの粗大ゴミ - atsuoishimoto's diary
                                                                    • スタティックメソッドは要らない子? - atsuoishimoto's diary

                                                                      Pythonでは、クラス内で定義することの出来るメソッドが三種類用意されている。メソッド・クラスメソッド・スタティックメソッドの3種類だ。それぞれどんな特徴を持っているのだろうか? メソッド まず、メソッドはおなじみのインスタンスメソッドで、第一引数としてインスタンスを受け取り、呼び出す時には必ずインスタンスが必要となる。 class Foo(object): # メソッド def method(self, arg): pass Foo().method("arg") #OK Foo.method("arg") #これはエラー クラスメソッド クラスメソッドは第一引数としてクラスオブジェクトを受け取り、インスタンスが無くとも呼び出すことが出来る。 class Foo(object): # クラスメソッド @classmethod def clsmethod(cls, arg): pass

                                                                        スタティックメソッドは要らない子? - atsuoishimoto's diary
                                                                      • PyConJP2012 スライド・資料まとめ

                                                                        公式サイト:PyCon JP 2012 開催します! - PyCon JP 2012 発表風景:PyConJP - YouTube 一日目参加してきました。 二日目参加中です。 参加者・発表者のみなさんお疲れ様でした。 見つけられた発表者スライド・資料をまとめてみます。 「これが足りないよ!」というのがあれば、 URL付きでTwitterにメンションなり、 連絡いただければ追加します。 というか是非連絡お願いします。 Togetter・Twitterまとめ PyConJP 2012 1 日目 オープニング 〜 基調講演 - Togetter PyConJP 2012 1 日目 昼まで。 #PyConJP - Togetter PyConJP 2012 1 日目 昼から1コマ目 #PyConJP - Togetter PyConJP 2012 1 日目 14:30 - 15:15 台 #Py

                                                                        • python.jpの明日はどっちだ - atsuoishimoto's diary

                                                                          最近「PYJUGって何なの?」「網元衆って何なの?」「何してるの?」「誰なの?」 って話を聞く機会が多いように思えます。 Pyjug-discussへの投稿も凄く減っていますし また網元衆が再編成されて5年も経っています。 外から見ていると、そろそろ運営が実態に合っていないようにも見えます。 なので、網元衆に参加をしてその辺をもっと透明化したいと考えました。 そこで http://www.python.jp/Zope/pyjug/webmasters にある通りにメールをしたのですが 権限がなくて送信出来ずに困っています。 どうしたら良いのか教えて頂けるとありがたいです。 よろしくお願いします。 http://www.python.jp/pipermail/pyjug-discuss/2012-July/000232.html このメールに一日以上応答すらないというのは、もうpython.

                                                                          • Python 3.8 の概要 (その3) - Pickle protocol 5 with out-of-band data - atsuoishimoto's diary

                                                                            Pythonでは、複雑なデータの交換や保管する場合、よく Pickleモジュール が使われます。Pickleはデータを外部に出力可能な形式に変換してファイルに変換したり、サーバと通信して送信したりします。 Pythonのconcurrent.futures や multiprocessing を使って並列処理を行う場合も、プロセス間のデータ交換に Pickle が使われています。 PEP-574 Pickle protocol 5 with out-of-band data Pickleは汎用的なデータフォーマットを定義していて、データを作成したハードウェアと異なるアーキテクチャのハード上で読み込んでも、ただしく元のデータを再現できるようになっています。 しかし、現在ではPickleの使い方は多様化しており、そういった汎用的なデータフォーマットだけでは効率的にデータの転送や保管を行えないこ

                                                                              Python 3.8 の概要 (その3) - Pickle protocol 5 with out-of-band data - atsuoishimoto's diary
                                                                            • Introduction to cython

                                                                              DynamicFusion is a method for reconstructing and tracking non-rigid scenes in real-time by extending KinectFusion. It uses a volumetric truncated signed distance function (TSDF) to integrate depth maps from multiple viewpoints into a global reconstruction. Live depth frames are aligned to a dense surface prediction generated by raycasting the TSDF. This closes the loop between mapping and localiza

                                                                                Introduction to cython
                                                                              • Python 3.8 の概要 (その2) - Positional-only parameters - atsuoishimoto's diary

                                                                                Python 3.0 以降では、関数を定義するときに、キーワード専用引数 を指定できるようになりました。 def func(a, b, *, c=1, d=2): return a+b+c+d こんなのですね。引数のリストに * がある関数を呼び出すとき、* の後ろにある引数の値は、かならずキーワード引数として指定しなければいけません。 ↑の関数だと、引数 c はキーワード引数で指定すればちゃんと動きます。 >>> func(1, 2, c=10) 15 しかし、キーワードなしで呼び出すとエラーになります。 >>> func(1, 2, 10) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: func() takes 2 positional arguments but 3

                                                                                  Python 3.8 の概要 (その2) - Positional-only parameters - atsuoishimoto's diary
                                                                                • 作りたいもの:技術書向きの電子ブックリーダ - 西尾泰和のはてなダイアリー

                                                                                  昨日Twitterでつぶいたことのまとめ。こういうアプリが既にあったりしないのかなぁ。既にあるなら喜んでそれを使うんだけど。あったら教えて下さい。 技術書と小説の違い 技術書の小説と大きく異なる点は、シーケンシャルアクセスじゃなくてランダムアクセスが必要になるケースが多い点だ。 小説のように頭から順に読んでいくのではなく「ざっくり眺めておいて必要なところだけじっくり読む」という読まれ方のニーズがある。 「ざっくり斜め読み」をどうやって電子ブックビューワ上で実現するか? ページを画像として縮小しても漫画じゃないから「全く読めないゴミ情報」の山にしかならない。章タイトルだけ表示とか、太字や図などだけ表示とかが必要 ざっくり読んだ後の「あれどこに書いてあったっけ」支援のために検索とタグクラウド(検索キーワードのサジェスト)が重要 縦書きの対応は必要ない 理想を高く持つ 電子書籍ビューワはページを

                                                                                    作りたいもの:技術書向きの電子ブックリーダ - 西尾泰和のはてなダイアリー