タグ

ブックマーク / atsuoishimoto.hatenablog.com (11)

  • Python3.1の Unicode ファイル名 - atsuoishimoto's diary

    パソコンを使う人なら誰でも"ファイル名"というのを知ってるし、プログラマなら誰でもファイル名を使ったファイル操作は基礎として学んでいる。しかし、21世紀の今日ですら、時としてファイル名とはやっかいな問題となりうるのだ。 Python3では、文字列オブジェクトとして Unicode を全面採用し、基的にはファイルの操作も Unicode によるファイル名で行うようになった。 Windows のように、ファイルシステムがUnicodeで構成されていれば問題はないが、Unix では Unicode だけでなく、日語環境なら EUC-JP、ヨーロッパでは iso-8859-1 など、色々な文字コードによるファイル名が存在することになる。 たとえば、"a" という名前のファイルと "あ" という名前のファイルが置いてあるディレクトリがあるとする。この時、 "あ" のファイル名が UTF-8 で作

    Python3.1の Unicode ファイル名 - atsuoishimoto's diary
    yyamano
    yyamano 2023/04/25
  • 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
    yyamano
    yyamano 2019/09/03
  • Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - 第2夜 - atsuoishimoto's diary

    さて、先日 http://d.hatena.ne.jp/atsuoishimoto/20120503/1336050988 を紹介したが、Flaskアプリケーションの Blueprint 機能を使うと正しく動作しないようだ。Blueprintでは独自にテンプレートや静的ファイルのディレクトリを指定できるようになっているため、こちらも対処する必要があるのだ。 ということで、 class ResourceMixin(object): PACKAGENAME = "demo_pkgrsrc" @helpers.locked_cached_property def jinja_loader(self): return loaders.PackageLoader(self.PACKAGENAME, self.template_folder) def send_static_file(self, fi

    Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - 第2夜 - 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
  • 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
  • Python Developers Festa 2011.10 の発表資料 - atsuoishimoto's diary

    Python Developers Festa 2011.10で、「Pythonのシグナル処理」というネタを発表させて頂いた。 Pythonのシグナル処理 View more presentations from atsuoishimoto 内容的には、Pythonがどのようにシグナルを受け付けているのかという初歩的な解説と、一般的な注意点など。直前まで内容がまとまっておらず、ガチャガチャとした発表となってしまって大変申し訳ありませんでした。 今回のPython Developers Festa これまでのHack-a-thonから"Developers Festa"に変わった影響もあるのだろうか、一人黙々とプログラミングしている人より、ハンズオンなどに参加している人が目立っていた気がする。 この手のイベント、部屋で分かれて別々にハンズオンやセッションを行う伽藍方式が普通だが、今回のように

    Python Developers Festa 2011.10 の発表資料 - 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
  • James Gosling Interview about Java - atsuoishimoto's diary

    2011年1月1日に、IEEEの "Computer"マガジンは James Gosling にインタビューを行った。インタビュアーは、Gosling が作った言語(訳注:もちろんJavaのこと)を用いてのオブジェクト指向デザインに関して、この21年間を回顧するインタビューが取れるものと思っていた。しかし、インタビューが進むに連れ、もともと取材しようとしてたものよりも衝撃的な記事を得ることになった。その後、業界への衝撃が強すぎるとして、 編集者はその取材記事をボツにしたが、 こういうものには情報のリークが付き物である。 以下、インタビューの生の記録をお届けする。編集を行っておらず、またぶっつけ番であるため、原稿のあるインタビューのようにはきちんとしていないが、きっと読者は興味を感じてくれるものと思う… 尚、このインタビューの背景を正しく理解するために、同じインタビュアーによる Bjarn

    James Gosling Interview about Java - atsuoishimoto's diary
  • Pythonで正しく日本語を eval する - atsuoishimoto's diary

    @atsuoishimoto s = eval(compile(u"""'あいう'""")) すると、 s はWindowsでもUTF-8でエンコードされた文字列になっちゃうんですよ。 2011-02-15 08:26:31 via TweetDeck to @atsuoishimoto これはしたり!ちっとも気がつかなかった!普通のアプリ書いてるとcompile()やeval()を使うことはあんまりないからなぁ。@methaneさんが バグ報告 もしているが、Python2系列は知らね、とばかりにcloseされてしまっている。 >>> print eval("'あいうえお'") あいうえお >>> print repr(eval("u'あいうえお'")) u'\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8' >>> print repr(eval(u"'

  • 音声読み上げTwitterクライアントできた - atsuoishimoto's diary

    追記: 音声読み上げTwitterクライアントはWindows用アプリとして公開しました。http://d.hatena.ne.jp/atsuoishimoto/20110421/1303312754 をご参照ください。 先日の PyCon mini JP で見た スクリーンリーダNVDA のデモが非常に印象的だったので、ちょっとダウンロードして遊んでみた。 正直、日語の音声読み上げがオープンソースでここまでの品質とは思わなかった。大昔、私が見た音声読み上げは、不愉快な音でゆっくりと不明瞭な言語らしきものを読み上げる、まったく役立たずの代物だったからだ。 しかし、NVDAに付属している Open JTalk をベースとした日音声合成エンジンはなかなかのものである。NVDAのソースをちょっと見てみると、どうやら簡単に日音声合成エンジンを利用できそうだ。 というわけで、早速 ymot

    音声読み上げTwitterクライアントできた - atsuoishimoto's diary
  • Pythonの特殊メソッド - atsuoishimoto's diary

    Python関連のブログやTwitterでの発言を見ていると、ときどき obj() は obj.__call__() のシンタックスシュガー とか、 len(obj) は、 obj.__len__() と同じ というような発言を見かけるとこがある。当だろうか? obj() は obj.__call__() のシンタックスシュガー? もしobj() が obj.__call__() のシンタックスシュガーなら、obj.__call__() は obj.__call__.__call__() のシンタックスシュガーであり、obj.__call__.__call__() は obj.__call__.__call__.__call__() のシンタックスシュガー… という事になってしまい、いつまでたっても処理を実行できなくなってしまう。 という訳で、obj() を obj.__call__()

    Pythonの特殊メソッド - atsuoishimoto's diary
  • 1