Python 3.8 の概要 (その8) - Did you mean "=="?

さて、質問です。 a = 1.0 a is 1.0 上記の処理で、a is 1.0 の結果は True となるでしょうか、それとも False となるでしょうか? True と答えたあなた、不正解です。反省してください。 False と答えたあなた、同じく不正解です。猛省してください。 正解…

Python 3.8 の概要 (その7) - ちょっと便利そうな機能追加

math.prod() リストなどのイテレータの要素の積を計算する math.prod() が追加されました。 sum() の掛け算版ですね。 >>> import math >>> math.prod([1,2,3,4]) 24 正規表現が \N{名前} 記法をサポート reモジュールで、正規表現に文字の名前を指定する \N…

Python 3.8 の概要 (その6) - 拡張モジュール関連

拡張モジュールがリリースビルド/デバッグビルドで共用可能に これまで、デバッグ用にビルドされたPythonでは、Pythonのメモリ使用状況を調査するための機能 が有効になっていました。このため、リリース用にビルドされたPythonとデバッグ用にリリースされた…

Python 3.8 の概要 (その5) - デバッグ用 f文字列フォーマット

Python3.8の新機能で、これ一番好きかも。このためだけにPython3.8必須にしてもいい。 通常、 f文字列 に変数名や式を指定すると、その値が文字列に埋め込まれます。 >>> foo, bar = 10, 20 >>> print(f'value is {foo+bar}') value is 30 便利な機能ですが…

Python 3.8 の概要 (その4) - multiprocessing.shared_memory モジュール

multiprocessing.shared_memory モジュールで、共有メモリを使ってプロセス間でデータを交換できるようになりました。似たような処理は mmap モジュールで実現できましたが、マルチプラットフォームで簡単に利用できるようになります。 Numpyの ndarray オブ…

Python 3.8 の概要 (その3) - Pickle protocol 5 with out-of-band data

Pythonでは、複雑なデータの交換や保管する場合、よく Pickleモジュール が使われます。Pickleはデータを外部に出力可能な形式に変換してファイルに変換したり、サーバと通信して送信したりします。 Pythonのconcurrent.futures や multiprocessing を使って…

Python 3.8 の概要 (その2) - Positional-only parameters

Python 3.0 以降では、関数を定義するときに、キーワード専用引数 を指定できるようになりました。 def func(a, b, *, c=1, d=2): return a+b+c+d こんなのですね。引数のリストに * がある関数を呼び出すとき、* の後ろにある引数の値は、かならずキーワー…

Python 3.8 の概要 (その1) - Assignment expressions

古来、Pythonでは「代入は文であるべき!」と一貫して主張してきました。 C言語などでは、代入は足し算や掛け算と同じ、値を計算する「式」で、たとえば a = (b=100) / 2; と書くと、b には 100 を代入し、a に 100/2=50 を代入します。1+1 は 2 という値に…

RecursionError は RecursionError とは限らない、という話

先日、 Pythonjp Discordサーバ の初心者部屋で、こんな質問 があった。 次のようなコードが RecursionError 例外を出して困っているという。 if a: ... elif b: ... elif c: ... elif d: ... のように、数千個の elif が並んでるコードだ。 多くの場合、Rec…

Python.jp Discordサーバ雑感

Python.jp Discordサーバ の運用を本格的に開始してから半年以上経ったので、感想など。 ユーザ層 Pythonのユーザ層いうとビジネス層というか、おっちゃんが多いイメージがあるのだか、Discordというゲームで広く使われているシステムなためか、アクティブな…

docs.python.jpでのドキュメント公開終了

これまで、python.jpではPythonの日本語ドキュメントを公開してきたが、この度、ドキュメントのホスティングを終了し、docs.python.org へのリダイレクトのみをおこなうようになった。 www.python.jp 実に喜ばしいことである。これまで、日本語ドキュメント…

Pythonの高速化?

たまに、「Pythonの高速化」なんてブログを見かけることがある。書いてあるのは、たいてい s = 0 for i in list_of_ints: s += i と書くより、 s = sum(list_of_ints) のほうが速い!なので sum() 使おう!とかだ。 たしかに、sum() は速い。Pythonインター…

NumPyの歴史 と Pythonの並行処理

PyData.tokyo One-day Conference 2018 で登壇させていただきました pydatatokyo.connpass.com 発表資料 NumPyの歴史とPythonの並行処理 from Atsuo Ishimoto

Python.jp SlackからDiscordへ

これまで、python.jp ではSlackチームを用意していたが、こちらの利用は取り止めて、Discord に移行することにした。 書き込みはそれほどなかったものの、Python.jpチームには、約1000アカウントが登録されていた。そこそこな規模だろう。Slack->Discordへの…

Dell XPS 13 (9370) に Ubuntu 16.04 をインストールした

Dell XPS 13 (9370) の全部入り( i7-8550U・4Kタッチパネル・1TB SSD ・16 GBメモリ) を購入した。 これまでのところ、思ったより使い勝手がよい。キーボードはいい感じだし、パームレストのカーボンファイバも触り心地が良い。 液晶は非光沢がなくて光沢の…

hashlibのハッシュアルゴリズム、計算速度ってどのぐらい差があるの選手権

雑に図ってみた (Python 3.6.4) 対象ファイル: 画像ファイル約20000件(2GB弱) アルゴリズム 処理時間(秒) ファイル読み込み時間は含まず md5 2.536 sha1 1.798 sha256 3.873 sha384 2.591 sha512 2.626 まとめ sha1はええ。md5そんな速くねえ。sha512とそん…

Python/CFFIでCUDAしてみる

ふと思い立って、CUDAでCPUからGPUにデータを転送する時の速度を測ってみた。 普通にCUDA SDKのサンプルで測定しても良いが、PythonのCFFI で実行してみよう。 コードはこんな感じで書ける。 import time import sys from cffi import FFI ffi=FFI() ffi.cde…

クラスブロックのひみつ

さて、 リスト内包のひみつ - atsuoishimoto's diary で、Python3では、リスト内包式は関数呼び出しとなることを説明した。 >>> a = [i*2 for i in range(3)] というスクリプトは、次のように展開される。 >>> def _listcomp(_it): ... ret = [] ... for i i…

リスト内包のひみつ

こちらのTweetが Python.jp slack でちょっと話題になっていた。 どういうこと? pic.twitter.com/BxyyWbyvQo— ahuglajbclajep (@ahuglajbclajep) 2018年1月24日 次のようなコードだ >>> a = [lambda: print(i) for i in range(3)] >>> for i in a: i() 2 2 …

Python文法詳解(二刷) 正誤表

以下の正誤表は、二刷のものです。一刷の正誤表は Python文法詳解(一刷) 正誤表 - atsuoishimoto's diary を参照してください。 第1章 P.1 誤 >>> 1 + 1j # 整数 + 複素数 (1+2j) # 結果は複素数となる 正 >>> 1 + 1j # 整数 + 複素数 (1+1j) # 結果は複素数…

Pythonのfor文は遅い?

bicycle1885.hatenablog.com こちらの記事を拝見していて、ちょっと気になったので注釈。 PythonやRを使っている人で、ある程度重い計算をする人達には半ば常識になっていることとして、いわゆる「for文を使ってはいけない。ベクトル化*1しろ。」という助言…

GitLab PagesのDeployが失敗する場合の対処方法

GitLab Pages にドキュメント生成するたびに同じ落とし穴にハマるので、ここに記しておく。 GitLab Pagesにドキュメントを生成すると、ビルドが成功しても、その後のDeployが失敗する場合がある。 この問題は次のチケットでGitLabに報告済みで、もうすでにCl…

ダイクストラおばちゃん

最近、偶然プログラミング初心者に接する機会が続いた。初心者にもいろいろあるが、中でも印象深い女性のことを思い出したので書いておきたい。 大昔、ちょっとした業務改善のシステムを開発することになって、実際にその業務を行っている事務や経理の方々に…

API star - Python3用 Web API framework

最近何度か名前を目にした Webアプリケーションフレームワーク API Star を試してみた github.com まだ開発中のフレームワークだが、Pythonの型アノテーションをうまく利用して、Web APIを簡単に開発できるようになっている。 インストール githugからソース…

tse 0.0.15リリース

tse 0.0.15をリリースした。 組み込み関数 P() を追加 Python3以降では、print(...) の代わりに P(...) と書けるようにした。 コマンド置換 Python3以降では、`command` で コマンドとして command を実行するようにした。 例: $ tse -b 'P(`ps`)' PID TTY T…

静的サイトジェネレータ Miyadaiku

ここ数年、www.python.jp は、 Pelican を使って構築していた。 Pelican は実績のある静的サイトジェネレータで使いやすくはあるが、基本的にはBlogサイトの構築ツールであり、あまり柔軟性や拡張性には重点を置かれていないように感じていた。www.python.jp…

tse 0.0.14リリース

tse 0.0.14をリリースした。 組み込み関数 E() を追加 tseからコマンドを使うとき、毎度毎度 subprocess.check_output('ls', shell=True, universal_newline=True) とするのは面倒なので、E('ls') で呼び出せるようにした。 例: $ tse -b 'for l in E("ls").…

Python 3.6 リリースパーティー 発表資料

What's new in Python 3.6 from Atsuo Ishimoto

真空調理法(sous vide)の基礎調査

sous vide 真空調理法または低温調理法と呼ばれる。 フランス語で「真空で」という意味。「スービド」って発音するのかな。 肉などの食材をビニール袋に入れて空気を抜き、お湯につける調理方法。 一定の温度を保ったお湯を使って、長時間加熱して調理する。…

Python 3.6の概要 (最終回 - オプティマイズ)

Python 3.6では、長年に渡って使われてきた、Python の基本的な実装に関わる部分で、重要な変更が行われている。 辞書オブジェクトのレイアウト変更 Raymond Hettingerのアイデア を元に、稲田さん が実装したもので、古くから使われてきたPythonの辞書オブ…