Help us understand the problem. What is going on with this article?

[WIP] Fluent Python 勉強メモ

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

この記事は 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と認識してくれないのね。

brainpad
ブレインパッドは、2004年の創業以来、データによるビジネス創造と経営改善に向き合ってきたデータ活用・分析企業です。
http://www.brainpad.co.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした