Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@ieiringoo

[WIP] Fluent Python 勉強メモ

More than 1 year has passed since last update.

みなさん、こんにちは、えいりんぐーです。

この記事は Fluent Python の勉強メモ録です。随時更新されます。

正直プログラミング言語の教科書を真面目に読み通すことはあまりないのですが、言語について解説している本をちゃんと読むと、実務でアドホックに身につけるものとは違って、ちゃんとしたコーディング技術や発見があります。
ということで、Fluent Python で気になったことを適宜メモしていきたいと思います。

1章

P.8 脚注

Python 2では明示的に FrenchDeck(object) と記述する必要がありますが、Python 3ではデフォルトです。

...なん...だと...!?

2章

P.45

2.7 list.sortと組み込み関数sorted

list.sortメソッドはリストをインプレイスでソートし、コピーは作成しません。新規にリストを作成せずに対象のオブジェクトを変更していることは、Noneが返されることからもわかります。
(中略)
一方で、組み込み関数のsortedは新規リストを作成し、それを返します。

へー。リストを並べ替えて自分に保存するとかよくやっていたので、参考になしました。

2.9.1 配列

リストに数値のみが含まれているときは、list よりも array.array の方がより効率的です。...(略)...Pythonの配列はCの配列と同じくらい効率的です。array はタイプコードを指定して作成しますが、これは配列に格納する要素の型を内部のCのデータ型で支持するためです。

リストもだいたい同じ型のデータしか使わないので、配列を使うようになればもっと効率的にできるんでしょうね。プロコンとか全然やったことないですが、ここら辺を知らないと通用しないでしょうね。

3章

P. 76

my_dict.setdefault(key, []).append(new_value)
これは、操作的には次と同じです。

if key not in my_dict:
my_dict[key] = []
my_dict[key].append(new_value)

if文を使う方法は、やりがちなので気をつけたい。

4章

余分なのはb'\xff\xfeです。これらはBOM (byte-order mark)で、エンコーディングを実行したIntel CPUの「リトルエンディアン」バイト順序を表しています。~中略~
ファイルがUTF-16でそこにBOMがなければ、UTF-16BE (ビッグエンディアン) を想定すべきと標準は規定しています。しかしIntel x86アーキテクチャはリトルエンディアンで、BOMのついていないリトルエンディアンUTF-16がたくさん出回っています。
エンディアンにかかわる問題は、UTF-16やUTF-32のような複数のバイトでワードを構成するエンコーディングにのみ影響します。UTF-8の大きな利点の1つは、マシンのエンディアンに関係なく同じバイトのシーケンスを生成するところです。BOMは必要ありません。それにもかかわらず、WindowsのアプリケーションにはUTF-8ファイルにBOMを追加するものがあります (特にメモ帳)。ExcelのUTF-8ファイル検出はBOMに依存しており、BOMがなければコンテンツがWindowsコードページでエンコードされていると仮定します。

あー、だからPythonで書き出したcsv/tsvをExcelで読み込ませると文字化けするのね。デフォルトでutf-8と認識してくれないのね。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
brainpad
ブレインパッドは、2004年の創業以来、データによるビジネス創造と経営改善に向き合ってきたデータ活用・分析企業です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?