# 一般 Python FAQ

## 一般情報

### Python とは何ですか？

Python は、インタプリタ形式の、対話的な、オブジェクト指向プログラミング言語です。この言語には、モジュール、例外、動的な型付け、超高水準の動的なデータ型、およびクラスが取り入れられています。 Pythonは、オブジェクト指向プログラミングを越えて、手続き型プログラミングや関数型プログラミングなど複数のプログラミングパラダイムをサポートしています。 Python は驚くべきパワーと非常に分かりやすい文法を持ち合わせています。そして、多くのシステムコールやライブラリへだけでなく、様々なウィンドウシステムへのインターフェースがあり、C や C++ で拡張することもできます。また、プログラム可能なインターフェースが必要なアプリケーションのための拡張言語としても利用できます。最後に、Python はポータブルです。Linux や macOS を含む多くの Unix の派生システムで動き、Windows でも動きます。

さらに知りたければ、 Python チュートリアル から始めましょう。他にも、 Beginner's Guide to Python から、Python 学習のための入門用チュートリアルやリソースを参照できます。

### Python Software Foundation とは何ですか？

Python Software Foundation は、Python バージョン 2.1 以降の著作権を保持する独立の非営利組織です。PSF の任務は、Python プログラミング言語に関するオープンソース技術を進め、Python の使用を広めることです。PSF のホームページが https://www.python.org/psf/ にあります。

PSF への寄付は米国で免税されています。Python を利用して役立ったと感じたら、the PSF donation page で貢献をお願いします。

### Python を使うのに著作権の制限はありますか？

あなたが作成する Python に関するドキュメントのすべてに著作権を残し、それらの著作権を表示する限り、ソースコードをどのように扱ってもかまいません。この著作権規則を尊重する限り、商用に Python を利用しても、ソースあるいはバイナリ形式で(変更の有無にかかわらず) Python のコピーを販売しても、Python が何らかの形で組み込まれた製品を販売してかまいません。もちろん、Python のあらゆる商業用途についても同様です。

PSF License のより詳しい説明と全文へのリンクは the license page を参照してください。

Python のロゴは商標登録されていて、使用に許可が必要な場合があります。詳しい情報は the Trademark Usage Policy を参照してください。

### そもそも Python は何故創られたのですか？

Guido van Rossum によると、すべての始まりについての 非常に 簡潔な概要は以下のとおりです:

> 私は CWI の ABC グループでインタプリタ言語を実装する幅広い経験をしていて、そこで共に働くことで言語設計に関して大いに学びました。これは文のグループ化にインデントを使用することや超高水準のデータ型の包含など、(詳細は Python とは全く異なりますが) Python の多くの特徴のもととなっています。

> 私は ABC 言語に対して多くの不満を持っていましたが、同時に特徴の多くが好きでもありました。ABC 言語 (やその実装)を拡張して私の不満を解消することは不可能でした (実際、拡張性の欠如は大きな問題だったのです)。私は Modula-2+ を使用することでいくらかの経験を積み、Modula-3 のデザイナーと話して Modula-3 のレポートを読みました。Modula-3 は例外処理に使う構文や語義、その他いくつかの Python の特徴の起源です。

> 私は CWI で Amoeba 分散オペレーティングシステムのグループで働いていました。Amoeba のシステムコールインターフェースには Bourne シェルからアクセスしにくかったので、C プログラムや Bourne シェルスクリプトを書くよりも良いシステム管理の方法が必要でした。Amoeba のエラー処理の経験から、プログラミング言語の機能としての例外の重要さを強く意識するようになりました。

> ABC のような構文と Amoeba のようなシステムコールを合わせ持ったスクリプト言語が必要だろうと思いつきました。Amoeba 専用の言語を書くのは愚かであるだろうと気づき、一般に拡張できるような言語を求めることに決めました。

> 1989 年のクリスマス休暇の間、自由な時間がたくさんできたので、その言語を実際に作ってみることにしました。翌年の間、勤務時間以外はほとんどその開発に費やし、Python は Amoeba プロジェクトのなかで成果を重ね、同僚からのフィードバックは私の開発を大いに加速させてくれました。

> 1991 年 2 月、1 年間と少しの開発を経て、USENET に投稿することにしました。それは `Misc/HISTORY` ファイルに残っています。

### Python は何をするのに向いていますか？

Python は、多岐にわたる問題に適用できる高水準な汎用プログラム言語です。

この言語は、文字列処理(正規表現、Unicode、ファイル間の差分の計算)、インターネットプロトコル(HTTP、FTP、SMTP、XML-RPC、POP、IMAP)、ソフトウェアエンジニアリング(Python コードのユニットテスト、ロギング、プロファイリング、解析)、オペレーティングシステムインターフェース(システムコール、ファイルシステム、 TCP/IP ソケット) のような領域をカバーする大規模な標準ライブラリから成り立っています。何ができるかを知るには Python 標準ライブラリ の一覧を参照してください。また、様々なサードパーティの拡張も使えます。 the Python Package Index から興味のあるパッケージを探してみましょう。

### Python のバージョン番号の仕組みはどうなっているのですか？

Python のバージョン番号は "A.B.C" または "A.B" が付けられます :

- A はメジャーバージョン番号です -- 言語に本当に大きな変更があった場合に増やされます。

- B はマイナーバージョン番号です -- 驚きの少ない変更があった場合に増やされます。

- C はマイクロバージョン番号です -- バグフィックスリリースごとに増やされます。

すべてのリリースがバグフィックスリリースであるというわけではありません。フィーチャーリリースへの準備段階では、一連の開発リリースが作られ、アルファ版、ベータ版、またはリリース候補と名付けられます。アルファ版はインターフェースが確定されないうちにリリースされる早期リリースで、２つのアルファリリース間でインターフェースが変わるかもしれません。ベータ版はもっと安定していて、現存のインターフェースは保存されますが新しいモジュールが追加されるかもしれません。リリース候補は固まったもので、致命的なバグを直すのでなければ変更されません。

アルファ、ベータとリリース候補のバージョンは、追加の接尾辞を持ちます:

- アルファバージョンの接尾辞は、ある小さな数 N に対して "aN "となります。

- ベータバージョンの接尾辞は、ある小さな数 N に対して "bN" となります。

- リリース候補バージョンの接尾辞は、ある小さな数 N に対して "rcN" となります。

つまり、 2.0aN と付けられたバージョンはすべて 2.0bN に先立ち、 2.0bN は 2.0rcN に先立ち、そして これら は 2.0 に先立ちます。

また、"2.2+" のように "+" 接尾語が付いたバージョン番号もあります。これは未発表のバージョンで、 CPython 開発リポジトリから直接ビルドされています。実際、最後のマイナーリリースが行われた後、バージョンは "2.4a0" のように "a0" がつく次のマイナーバージョンになります。

開発サイクルの詳細は Developer's Guide を、 Python の後方互換性ポリシーについては PEP 387 を参照してください。 ドキュメント `sys.version` 、 `sys.hexversion` 、 `sys.version_info` も参照してください。

### Python のソースのコピーはどこで手に入りますか？

最新の Python ソースは python.org (https://www.python.org/downloads/) からいつでも手に入れることができます。最新の開発版ソースは https://github.com/python/cpython/ にアクセスして手に入れることができます。

ソースは gzip された tar ファイルで配布され、完全な C のソース、Sphinx によりフォーマットされたドキュメント、Python ライブラリモジュール、サンプルプログラム、そしていくつかの役立つ配布自由なソフトウェアを含んでいます。このソースはほとんどの UNIX プラットフォームでそのままコンパイルして動かせます。

ソースコードの入手とコンパイルについて、より詳しい情報は Getting Started section of the Python Developer's Guide を参照してください。

### Python のドキュメントはどこで手に入りますか？

Python の現行の安定バージョンの標準ドキュメントは https://docs.python.org/3/ から利用できます。また、PDF、プレーンテキスト、ダウンロードできる HTML 版も https://docs.python.org/3/download.html から利用できます。

このドキュメントは reStructuredText で書かれ、the Sphinx documentation tool で構成されました。このドキュメントに使われた reStructuredText のソースは Python のソース配布に含まれます。

### プログラミングをしたことがないのですが、Python のチュートリアルはありますか？

膨大な量の役に立つチュートリアルや書籍があります。標準のドキュメントには Python チュートリアル などがあります。

Python プログラム初心者のための情報のチュートリアルのリストは the Beginner's Guide を参照してください。

### Python のためのニュースグループやメーリングリストはありますか？

ニュースグループ comp.lang.python やメーリングリスト python-list があります。ニュースグループとメーリングリストは互いに接続されていて、ニュースを購読すればメーリングリストに参加する必要はありません。 comp.lang.python は一日に数百のポスティングを受ける高いトラフィックで、USENET 読者は多くの場合、このボリュームに応えることができます。

新しいソフトウェアリリースとイベントの告知は comp.lang.python.announce で見つけられます。これは一日に 5 ポスティング程度を受ける低トラフィックの手頃なメーリングリストです。the python-announce mailing list から利用可能です。

その他のメーリングリストやニュースグループについての詳しい情報は https://www.python.org/community/lists/ にあります。

### Python のベータテスト版はどこで手に入りますか？

アルファ/ベータリリースは https://www.python.org/downloads/ で手に入ります。リリースはすべて comp.lang.python や comp.lang.python.announce のニュースグループと Python ホームページ https://www.python.org/ で告知され、RSS ニュースフィードが利用できます。

Git から開発版を手に入れることもできます。詳細は The Python Developer's guide を参照してください。

### Python のバグ報告やパッチを上げるにはどうしたら良いですか？

バグの報告やパッチの提出には、issue tracker https://github.com/python/CPython/issues をご利用ください。

Python 開発の工程について、詳しくは the Python Developer's Guide を参照してください。

### Python について発行された記事を何か参照できますか？

Python に関するあなたの愛読書を引用するのが一番でしょう。

Python に関する 一番初めの記事 はとても古く、1991年に書かれています。

> Guido van Rossum and Jelke de Boer, "Interactively Testing Remote Servers Using the Python Programming Language", CWI Quarterly, Volume 4, Issue 4 (December 1991), Amsterdam, pp 283--303.

### Python の本はありますか？

はい、たくさんあり、そのほとんどは現在も出版されています。リストは python.org wiki https://wiki.python.org/moin/PythonBooks にあります。

また、オンライン書店で "Python" で検索し、Monty Python をフィルタで除外してもいいです (または、"Python" と "言語" で検索してください)。

### www.python.org は世界のどこにあるのですか？

Pythonプロジェクトのインフラは世界中にあり、Pythonインフラストラクチャチームによって管理されています。詳細は こちら.

### なぜ Python という名前なのですか？

Python の開発が始まった頃、Guido van Rossum は 1970 年代に始まった BBC のコメディシリーズ "Monty Python's Flying Circus" の台本を読んでいました。Van Rossum は、短くて、ユニークで、少しミステリアスな名前が欲しかったので、この言語の名前を Python と呼ぶことにしたのです。

### 『空飛ぶモンティ・パイソン』を好きでなくてはいけませんか？

いいえ。でも、好きになってくれるといいな。: ）

## 現実世界での Python

### Python はどれくらい安定していますか？

とても安定しています。1991 年以来新しい安定リリースはおよそ 6 から 18 ヶ月毎に出されていて、このペースが続きそうです。バージョン3.9の時点では、Pythonは12ヶ月に一度のペースで新しいフィーチャーリリースを行っています (PEP 602) 。

開発者が旧バージョンのバグフィックスリリースを公開するので、既存リリースの安定性は徐々に向上していきます。バグフィックスリリースは、バージョン番号の 3 番目の要素によって示され(例: 3.5.3、3.6.2)、安定性のために管理されています。バグフィックスリリースには既知の問題への修正だけが含まれ、一連のバグフィックスリリースを通じて同じインターフェースが保たれることが保証されているのです。

The latest stable releases can always be found on the Python download page. There are two production-ready versions of Python: 2.x and 3.x. The recommended version is 3.x, which is supported by most widely used libraries. Although 2.x is still widely used, it is not maintained anymore.

### どれくらいの人が Python を使っていますか？

正確な人数を調べるのは難しいですが、おそらく何百万人ものユーザーがいるでしょう。

Python は自由にダウンロード可能なので、売上高がなく、多数のサイトから利用でき、多くの Linux ディストーションに同梱されているので、ダウンロード統計から全体の状況を知ることはできません。

comp.lang.python ニュースグループはとても活発ですが、すべての Python ユーザーが投稿するわけではなく、読みすらしない人もいます。

### Python で行われた大きなプロジェクトはありますか？

Python を利用しているプロジェクトのリストは https://www.python.org/about/success を参照してください。past Python conferences から議事録を参照すると、多くの会社や組織の貢献がわかるでしょう。

注目されている Python のプロジェクトは the Mailman mailing list manager や the Zope application server などです。Red Hat をはじめとするいくつかの Linux ディストーションのインストーラやシステムアドミニストレーションソフトウェアは、一部や全部が Python で書かれています。内部で Python を利用している企業には、Google、Yahoo、Lucasfilm Ltd. などがあります。

### 将来 Python にどのような新しい開発が期待されますか？

Python Enhancement Proposals (PEP) https://peps.python.org/ を参照してください。PEP は Python に提案された新機能について書かれた設計書で、簡潔な技術仕様と原理が提供されています。"Python X.Y Release Schedule" (X.Y はまだリリースされていないバージョン) を探してください。

新しい開発については the python-dev mailing list で議論されています。

### Python の互換性を無くすような提案をしてもいいのですか？

一般的には、してはいけません。世界中にすでに何百万行もの Python コードがあるので、既存のプログラムのどんなに僅かな部分でも無効にしてしまうような言語仕様の変更も認められてはなりません。コンバートするプログラムが出来てさえ、すべてのドキュメントをアップデートしなければならないという問題があります。 Python に関する多くの本が出版されているので、それらを一発で不適切にするようなことはしたくないです。

仕様を変えなければならないのなら、緩やかなアップグレード計画が組まれなくてはなりません。 PEP 5 で、ユーザーの受ける分裂を最小限にしながら後方互換性のない変更を行うために従うべき手順について説明しています。

### Python は初心者プログラマに向いている言語ですか？

はい。

未だにプログラミング初学者にとって一般的なのは、Pascal、C、C++ のサブセット、 Java など、手続き型の静的型付けの言語です。生徒にとっては、第一の言語として Python を学ぶのが役に立つでしょう。Python には非常に簡潔で一貫した構文と大きな標準ライブラリがあります。そして一番重要なことに、初心者プログラミングのコースで Python を学ぶことで、生徒は問題の分析やデータ型の設計など、重要なプログラミングスキルに集中することができるのです。 Python なら、生徒はループや手続きなどの基本概念をすぐに取り入れられます。最初の課程でいきなりユーザ定義のオブジェクトを操ることさえできるでしょう。

プログラミングをしたことがない初心者にとって、静的型付け言語を使うのは不自然に思われます。習得すべき内容はより複雑になり、学習のペースが遅くなってしまいます。生徒は、コンピュータのように思考し、問題を分析し、一貫したインターフェースを設計して、データをカプセル化することを学ぶことになります。長期的に見れば静的型付け言語を学ぶことは重要ですが、それが最初のプログラミングの授業で学ぶべき最高の話題とは限りません。

Python の良いところは他にもたくさんあります。Python には、Java のように大きな標準ライブラリがあり、生徒が何かを する 段階で非常に早くプログラミングプロジェクトに参加できるようになります。宿題は標準の四則演算機や平均を求めるプログラムに限定されません。標準ライブラリを使用することで、生徒はプログラミングの原理を学びながら現実的なアプリケーションに取り組む満足感を得ることができます。また、標準ライブラリの使用からコードの再利用を学ぶことができます。 PyGame などのサードパーティモジュールもまた手が届く範囲を広げるのに役立ちます。

Python のインタラクティブインタプリタによって、プログラミングをしながら、言語機能を確認することができます。別のウィンドウでプログラムのソースに入っている間、ウィンドウでインタプリタを起動させたままにしておくことができます。リストのメソッドを思い出せないときは、例えばこのようにできます:

    >>> L = []
    >>> dir(L)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
    '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
    '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
    '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
    '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
    '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
    '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
    'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
    'reverse', 'sort']
    >>> [d for d in dir(L) if '__' not in d]
    ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    >>> help(L.append)
    Help on built-in function append:

    append(...)
        L.append(object) -> None -- append object to end

    >>> L.append(1)
    >>> L
    [1]

インタプリタがあれば、プログラミングをしている間にドキュメントは生徒のそばを離れません。

Python のための良い IDE もあります。IDLE は Python で Tkinter を使って書かれたクロスプラットフォーム IDE です。Emacs には、ユーザにとって幸運なことに、素晴らしい Python モードがあります。これらすべてのプログラミング環境から、シンタックスハイライト、オートインデント、コーディング中のインタラクティブインタプリタへのアクセスが使えます。the Python wiki から Python 編集環境の一覧を参照してください。

Python の教育における利用についての議論がしたいなら、the edu-sig mailing list に参加するとよいでしょう。