一般 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)、安定性のために
管理されています。バグフィックスリリースには既知の問題への修正だけが含
まれ、一連のバグフィックスリリースを通じて同じインターフェースが保たれ
ることが保証されているのです。

最新の安定版リリースは常に Python download page にあります。Pythonには
2.xと3.xという、製品に利用可能な2つのバージョンがあります。推奨のバー
ジョンは3.xで、これは広く利用されているライブラリのほとんどでサポート
されています。2.xも依然として広く利用されていますが、もうこれ以上はメ
ンテナンスされません 。


どれくらいの人が 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 に参加するとよいでしょう。
