Skip to Content
Fluent Python ―Pythonicな思考とコーディング手法
book

Fluent Python ―Pythonicな思考とコーディング手法

by Luciano Ramalho, 豊沢 聡, 桑井 博之, 梶原 玲子
October 2017
Intermediate to advanced
832 pages
13h 34m
Japanese
O'Reilly Japan, Inc.
Content preview from Fluent Python ―Pythonicな思考とコーディング手法

7章関数デコレータとクロージャ

何でこの機能に「デコレータ」という名前を付けたんだ、GoF本の名称と一致していないじゃないか、という苦情がこれまでに多数寄せられてきました†1。「装飾する」(decorate)という名前はおそらく、コンパイラが構文木を辿って(関数などに追加の)情報を加えるという動作によるところが大きいでしょう。

——Smith, Jewett, Montanaro & Baxter「PEP 318-Decorators for Functions and Methods」より[07-01]

[†1] 1995年発行の『Design Patterns』の著者が「ギャングオブフォー(GoF)」と呼ばれるため、この書はGoF本と呼ばれています[EN-14][JP-05]

関数デコレータ(decorator)は、ソースコードの関数に「印」を付けることでその挙動に何らかの拡張を加えるときに使用します。強力な機能なのですが、使いこなすにはクロージャを理解しなければなりません。

Python 3.0から、予約済みのキーワードにnonlocalが新たに導入されました。クラスを中心に据えたオブジェクト指向の厳格な処方箋に従っているのなら、これは一生使わなくてもPythonプログラマとしての人生を有意義に送ることができるでしょう。しかし、自分の手で関数デコレータを実装したいのなら、クロージャを完璧に理解する必要があり、そうなればnonlocalの必要性も明らかになります。

どのようにデコレータで使うかとは別にして、クロージャはコールバックを用いた非同期プログラミングを効率的にするものです。また、(合理的な範囲で)関数スタイルでコーディングするときには必須です。

本章の最終的な目標は、最もシンプルな登録デコレータ( ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Using Asyncio in Python

Using Asyncio in Python

Caleb Hattingh
Robust Python

Robust Python

Patrick Viafore

Publisher Resources

ISBN: 9784873118178Other