pythonについて、調べてみた件

Python( パ イ ソ ン ) は 、 汎 用 の プ ロ グ ラ ミ ン グ 言 語 で あ る 。 コ ー ド が シ ン プ ル で 扱 い や す く 設 計 さ れ て お り 、 C言 語 な ど に 比 べ て 、 さ ま ざ ま な プ ロ グ ラ ム を 分 か り や す く 、 少 な い コ ー ド 行 数 で 書 け る と い っ た 特 徴 が あ る 。 

概 要 

文 法 を 極 力 単 純 化 し て コ ー ド の 可 読 性 を 高 め 、 読 み や す く 、 ま た 書 き や す く し て プ ロ グ ラ マ の 作 業 性 と コ ー ド の 信 頼 性 を 高 め る こ と を 重 視 し て デ ザ イ ン さ れ た 、 汎 用 の 高 水 準 言 語 で あ る 。 反 面 、 実 行 速 度 は Cに 比 べ て 犠 牲 に さ れ て い る 。 

核 と な る 本 体 部 分 は 必 要 最 小 限 に 抑 え ら れ て い る 。 一 方 で 標 準 ラ イ ブ ラ リ や サ ー ド パ ー テ ィ 製 の ラ イ ブ ラ リ 、 関 数 な ど 、 さ ま ざ ま な 領 域 に 特 化 し た 豊 富 で 大 規 模 な ツ ー ル 群 が 用 意 さ れ 、 イ ン タ ー ネ ッ ト 上 か ら 無 料 で 入 手 で き 、 自 ら の 使 用 目 的 に 応 じ て 機 能 を 拡 張 し て ゆ く こ と が で き る 。 

ま た Pythonは 多 く の ハ ー ド ウ ェ ア と OS (プ ラ ッ ト フ ォ ー ム ) に 対 応 し て お り 、 複 数 の プ ロ グ ラ ミ ン グ パ ラ ダ イ ム に 対 応 し て い る 。 Pythonは オ ブ ジ ェ ク ト 指 向 、 命 令 型 、 手 続 き 型 、 関 数 型 な ど の 形 式 で プ ロ グ ラ ム を 書 く こ と が で き る 。 動 的 型 付 け 言 語 で あ り 、 参 照 カ ウ ン ト ベ ー ス の 自 動 メ モ リ 管 理 ( ガ ベ ー ジ コ レ ク タ ) を 持 つ 。 

こ れ ら の 特 性 に よ り Pythonは 広 い 支 持 を 獲 得 し 、 Webア プ リ ケ ー シ ョ ン や デ ス ク ト ッ プ ア プ リ ケ ー シ ョ ン な ど の 開 発 は も と よ り 、 シ ス テ ム 用 の 記 述  (script) や 、 各 種 の 自 動 処 理 、 理 工 学 や 統 計 ・ 解 析 な ど 、 幅 広 い 領 域 に お け る 有 力 な プ ロ グ ラ ム 言 語 と な っ た 。 プ ロ グ ラ ミ ン グ 作 業 が 容 易 で 能 率 的 で あ る こ と は 、 ソ フ ト ウ ェ ア 企 業 に と っ て は 投 入 人 員 の 節 約 、 開 発 時 間 の 短 縮 、 ひ い て は コ ス ト 削 減 に 有 益 で あ る こ と か ら 、 産 業 分 野 で も 広 く 利 用 さ れ て い る 。 Googleな ど 主 要 言 語 に 採 用 し て い る 企 業 も 多 い 。 

Pythonの リ フ ァ レ ン ス 実 装 で あ る CPythonは 、 フ リ ー か つ オ ー プ ン ソ ー ス の ソ フ ト ウ ェ ア で あ り 、 コ ミ ュ ニ テ ィ ベ ー ス の 開 発 モ デ ル を 採 用 し て い る 。 CPythonは 、 非 営 利 団 体 で あ る Pythonソ フ ト ウ ェ ア 財 団 が 管 理 し て い る 。 そ の 他 の 実 装 と し て は 、 PyPyや IronPythonな ど が 有 名 で あ る 。 

Pythonは 、 オ ラ ン ダ 人 の グ イ ド ・ ヴ ァ ン ロ ッ サ ム が 開 発 し た 。 名 前 の 由 来 は 、 イ ギ リ ス の テ レ ビ 局  BBC が 製 作 し た コ メ デ ィ 番 組 『 空 飛 ぶ モ ン テ ィ ・ パ イ ソ ン 』 で あ る 。 Pythonと い う 英 単 語 が 意 味 す る 爬 虫 類 の ニ シ キ ヘ ビ が Python言 語 の マ ス コ ッ ト や ア イ コ ン と し て 使 わ れ て い る 。 

特 徴 

Pythonは イ ン タ プ リ タ 上 で 実 行 す る こ と を 前 提 に 設 計 し て い る 。 以 下 の 特 徴 を も っ て い る :

  • 動 的 な 型 付 け 
  • ガ ベ ー ジ コ レ ク シ ョ ン 
  • マ ル チ パ ラ ダ イ ム 
  • モ ジ ュ ー ル 、 ク ラ ス 、 オ ブ ジ ェ ク ト 等 の 言 語 の 要 素 が 内 部 か ら ア ク セ ス 可 能 で あ り 、 リ フ レ ク シ ョ ン を 利 用 し た 記 述 が 可 能 。 
  • 動 作 す る 計 算 機 環 境  (platform)

    Pythonの 最 初 の バ ー ジ ョ ン は Amoeba上 で 開 発 さ れ た 。 の ち に 多 く の 計 算 機 環 境 上 で 動 作 す る よ う に な っ た 。 

  • Windows, Windows CE( 9x系 お よ び NT系 は 最 新 版 、 Windows 3.1お よ び MS-DOSは 旧 版 の み ) 
  • Macintosh( Classic Mac OSお よ び macOSと も に ) 
  • 各 種 UNIX
  • Linux( Linux Standard Base3.2で 標 準 仕 様 と な っ た ) 
  • Plan 9( Python 3.xは 未 移 植 ) 
  • PalmOS
  • S60
  • Javaプ ラ ッ ト フ ォ ー ム  (Jython)
  • .NET Frameworkプ ラ ッ ト フ ォ ー ム  (IronPython)
  • 実 装 

    Pythonに は 複 数 の 実 装 が 存 在 す る 。 

  • CPython – 作 者 に よ っ て C言 語 で 書 か れ た バ ー ジ ョ ン 。 通 常 「 Python」 と い え ば こ の CPythonを 指 す 。 
  • Stackless Python – Cス タ ッ ク を 使 わ ず に 独 自 の ス タ ッ ク ( Pythonス タ ッ ク ) で 実 装 し た も の 。 
  • Unladen Swallow – Googleの チ ー ム に よ る Pythonの 実 装 
  • Jython – Java仮 想 マ シ ン 上 に 移 植 し た も の 。 Pythonか ら Javaの ラ イ ブ ラ リ を 使 う こ と が で き る 。 
  • IronPython – .NET Framework/Monoで 動 作 す る Python。 C#で 実 装 さ れ て い る 。 .NET Frameworkの ラ イ ブ ラ リ を 使 う こ と が で き る 。 動 的 言 語 ラ ン タ イ ム 上 に 構 築 さ れ て い る た め 、 既 存 の .NETア プ リ ケ ー シ ョ ン へ マ ク ロ 言 語 と し て 搭 載 す る こ と も 可 能 と な っ て い る 。 
  • PyPy – Python (RPython) に よ る Pythonの 実 装 
  • Psyco – CPython向 け の JITコ ン パ イ ラ 
  • PyMite – 組 み 込 み 向 け の 実 装 、 AVRな ど に 対 応 。 
  • tinypy – 同 じ く 組 み 込 み 向 け の 実 装 。 ソ ー ス コ ー ド が 64KB未 満 と 非 常 に 軽 量 な こ と が 謳 わ れ て い る 。 
  • ラ イ セ ン ス 

    Python の リ リ ー ス は 全 て オ ー プ ン ソ ー ス で あ り 、 PSF (Python Software Foundationラ イ セ ン ス )と し て 配 布 さ れ て い る 。 こ れ は GPL互 換 で あ る が 、 GPLと 異 な り 、 変 更 し た バ ー ジ ョ ン を 配 布 す る 際 に 変 更 を オ ー プ ン ソ ー ス に し な く て も よ い 。 

    歴 史 

    元 々 は Amoebaの 使 用 言 語 で あ る ABC言 語 に 例 外 処 理 や オ ブ ジ ェ ク ト 指 向 を 対 応 さ せ る た め に 作 ら れ た 言 語 で あ る 。 

    0.9x

    1991年 に ヴ ァ ン ロ ッ サ ム が Python 0.90の ソ ー ス コ ー ド を 公 開 し た 。 こ の 時 点 で す で に オ ブ ジ ェ ク ト 指 向 言 語 の 特 徴 で あ る 継 承 、 ク ラ ス 、 例 外 処 理 、 メ ソ ッ ド や さ ら に 抽 象 デ ー タ 型 で あ る 文 字 列 、 リ ス ト の 概 念 を 利 用 し て い る 。 こ れ は Modula-3の モ ジ ュ ー ル を 参 考 に し て い た 。 

    1.x

    1994年 1月 、 Python 1.0を 公 開 し た 。 主 な 特 徴 と し て 関 数 型 言 語 の 基 本 で あ る ラ ム ダ 計 算 を 実 装 、 map関 数 、 reduce関 数 な ど を 組 み 込 ん だ 。 

    バ ー ジ ョ ン 1.4で は Common Lispに あ る 機 能 と よ く 似 た キ ー ワ ー ド 引 数 を 導 入 し た 。 ま た 簡 易 な が ら 名 前 修 飾 を 用 い た カ プ セ ル 化 も 実 装 し た 。 

    2.x

    2000年 に 公 開 。 ガ ベ ー ジ コ レ ク シ ョ ン や Unicode、 リ ス ト を 導 入 し た 。 一 躍 メ ジ ャ ー な 言 語 と な っ た 。 多 く の 機 能 は Haskellを 参 考 に し て 導 入 し て い る 。 

    2.6以 降 の バ ー ジ ョ ン に は 、 2.xか ら 3.xへ の 移 植 を 助 け る 「 2to3 ツ ー ル 」 と 「 lib2to3 モ ジ ュ ー ル 」 を 含 ん で い る 。 2.xの サ ポ ー ト は 2020年 ま で と さ れ て い る 。 

    3.x

    2008年 、 長 い 試 験 期 間 を 経 て Python 3.0が 公 開 さ れ た 。  開 発 初 期 に は 、 西 暦 3000年 に 公 開 予 定 の 理 想 の Pythonと し て 、 Python 3000と 呼 ん で い た 。 Py3Kと 略 す こ と も あ る 。 

    し か し 2.xと の 後 方 互 換 性 が 損 な わ れ て い る 。 当 初 は 2.xに 比 べ て 3.xが 利 用 で き る ラ イ ブ ラ リ 等 が 著 し く 少 な い と い う 問 題 点 が あ っ た が 、 Djangoな ど 徐 々 に 3.xに 対 応 し た フ レ ー ム ワ ー ク や ラ イ ブ ラ リ な ど が 増 え て い っ た こ と も あ り 、 2016年 時 点 に お い て は 新 規 の プ ロ ジ ェ ク ト に つ い て 3.xで 開 発 す る こ と が 多 く な っ て い る 。 

    2015年 11月 に リ リ ー ス さ れ た Fedora 23や 2016年 4月 に リ リ ー ス さ れ た Ubuntu 16.04 LTSで は 、 デ フ ォ ル ト で イ ン ス ト ー ル さ れ る Pythonの バ ー ジ ョ ン が 2.xか ら 3.xに 変 更 さ れ て い る 。 

  • print命 令 を print関 数 へ 変 更 
  • Unicodeを 全 面 採 用 
  • 整 数 を int型 に 一 本 化 
  • 順 序 付 き 辞 書 
  • 単 体 テ ス ト フ レ ー ム ワ ー ク 「 unittest」 へ の 機 能 追 加 
  • Tkinterで の Tile対 応 
  • import文 の リ フ ァ レ ン ス 実 装 と な る 、 Pythonで 実 装 し た importlibモ ジ ュ ー ル 
  • ネ ス ト し た with文 に 対 す る 新 た な 文 法 
  • 単 体 テ ス ト モ ジ ュ ー ル の ア ッ プ デ ー ト や 拡 張 モ ジ ュ ー ル 向 け  stable ABI
  • pyc レ ポ ジ ト リ デ ィ レ ク ト リ の サ ポ ー ト 
  • E-mail パ ッ ケ ー ジ や  SSL モ ジ ュ ー ル の 改 善 
  • pdb (Python debugger) の 改 良 
  • 新 し い 文 法 と し て 、 ジ ェ ネ レ ー タ 関 数 内 で 別 の ジ ェ ネ レ ー タ 関 数 を 利 用 す る 「 yield from」 を 追 加 。 
  • 「 u」 や 「 U」 と い っ た プ レ フ ィ ッ ク ス を 用 い た Unicodeリ テ ラ ル シ ン タ ッ ク ス を 復 活 
  • UCS-4文 字 列 に も 対 応 し 、 文 字 列 表 現 の 柔 軟 性 を 強 化 
  • 仮 想 化 Python実 行 環 境 を 導 入 す る た め の virtualenvパ ッ ケ ー ジ の 機 能 を 「 venv」 機 能 と し て コ ア に 取 り 込 ん だ 。 
  • オ ブ ジ ェ ク ト 指 向 フ ァ イ ル シ ス テ ム パ ス を 提 供 す る 「 pathlib」 モ ジ ュ ー ル の 提 供 
  • 列 挙 型 を 扱 う た め の enumモ ジ ュ ー ル の 標 準 化 
  • 統 計 関 数 を 提 供 す る statisticsモ ジ ュ ー ル の 導 入 
  • Pythonが 割 り 当 て た メ モ リ ブ ロ ッ ク を 追 跡 す る た め の デ バ ッ グ ツ ー ル の tracemallocモ ジ ュ ー ル の 導 入 
  • 非 同 期 I/Oを 扱 う た め の フ レ ー ム ワ ー ク と な る asyncioモ ジ ュ ー ル の 導 入 
  • Pythonの 組 み 込 み 関 数 に 関 す る 分 析 情 報 を 得 る た め 機 構 の 実 装 
  • zipア プ リ ケ ー シ ョ ン サ ポ ー ト の 改 良 
  • byte/bytearrayオ ブ ジ ェ ク ト の た め の 「 %」 フ ォ ー マ ッ ト 対 応 の 追 加 
  • 行 列 乗 算 演 算 子 @の 導 入 
  • 高 速 デ ィ レ ク ト リ ト ラ バ ー サ ル 機 能 os.scandir()の 導 入 
  • 割 込 が か か っ た シ ス テ ム コ ー ル の オ ー ト リ ト ラ イ 機 能 追 加 
  • 近 似 値 で あ る か ど う か を テ ス ト す る 機 能 の 導 入 
  • .pyoフ ァ イ ル の 削 除 
  • 拡 張 モ ジ ュ ー ル を ロ ー ド す る た め の 新 し い 仕 組 み の 導 入 
  • 文 字 列 中 に 式 を 埋 め 込 め る 「 Formatted string literals」 の 導 入 
  • 変 数 に 対 し て 型 に 関 す る 情 報 ( 型 ヒ ン ト ) を 与 え る 「 Syntax for variable annotations」 の 導 入 
  • 「 async」 お よ び 「 await」 文 法 で コ ル ー チ ン を 利 用 可 能 に す る 「 Asynchronous generators」 の 導 入 
  • 標 準 ラ イ ブ ラ リ に secretsモ ジ ュ ー ル を 追 加 
  • DTraceお よ び SystemTapプ ロ ー ブ の サ ポ ー ト を 追 加 
  • Python の 時 系 列 

  • 1990年 代 始 め  – オ ラ ン ダ に あ る Stichting Mathematisch Centrum (CWI)で 、 グ イ ド ・ ヴ ァ ン ロ ッ サ ム に よ っ て Pythonの 初 期 バ ー ジ ョ ン が 作 成 さ れ る 。 
  • 1995年  – ヴ ァ ン ロ ッ サ ム は 米 国 ヴ ァ ー ジ ニ ア 州 レ ス ト ン に あ る Corporation for National Research Initiatives (CNRI) に 移 動 。 こ こ で Pythonの 開 発 に 携 わ り 、 い く つ か の バ ー ジ ョ ン を 公 開 す る 。 
  • 2000年 3月  – ヴ ァ ン ロ ッ サ ム と Pythonの コ ア 開 発 チ ー ム は  BeOpen.com に 移 り 、 BeOpen PythonLabs チ ー ム を 結 成 す る 。 同 年 10月 、 PythonLabsチ ー ム は Digital Creations (現 在 の Zope Corporation) に 移 る 。 
  • 2001年  – Pythonに 関 す る 知 的 財 産 を 保 有 す る た め の 非 営 利 組 織 Pythonソ フ ト ウ ェ ア 財 団  (PSF) が 立 ち 上 が る 。 こ の と き Zope Corporationは PSFの 賛 助 会 員 と な る 。 
  • Pythonに 影 響 を 与 え た 言 語 

  • ABC( イ ン デ ン ト に よ る 構 文 ) 
  • Modula-2, -3( モ ジ ュ ー ル 機 能 、 オ ブ ジ ェ ク ト 指 向 ) 
  • Icon( 辞 書 、 ス ラ イ ス 演 算 子 な ど ) 
  • SETL( リ ス ト の 内 包 表 現 ) 
  • C, C++( 基 本 的 な 構 文 ) 
  • Smalltalk( 仮 想 マ シ ン 機 構 、 動 的 性 ) 
  • Lisp, Scheme( 関 数 型 言 語 の 機 能 ) 
  • 言 語 の 機 能 

    Pythonに は 、 読 み や す く 、 そ れ で い て 効 率 も よ い コ ー ド を な る べ く 簡 単 に 書 け る よ う に す る と い う 思 想 が 浸 透 し て お り 、 Pythonコ ミ ュ ニ テ ィ で も 単 純 で 短 い コ ー ド を よ し と す る 傾 向 が 強 い 。 

    Pythonの 本 体 は 、 ユ ー ザ が い つ も 必 要 と す る 最 小 限 の 機 能 の み を 提 供 す る 。 基 本 機 能 以 外 の 専 門 機 能 や 拡 張 プ ロ グ ラ ム は イ ン タ ー ネ ッ ト 上 に ラ イ ブ ラ リ と し て 提 供 さ れ て お り 、 別 途 ダ ウ ン ロ ー ド し て 保 存 し 、 必 要 な ツ ー ル は こ の ツ ー ル キ ッ ト か ら そ の 都 度 呼 び 出 し て 使 用 す る 。 

    ま た Pythonで は 、 Perlの 「 あ る こ と を 行 う の に 1つ 以 上 の 方 法 が あ る 」 と い う 哲 学 と は 逆 に 、 あ る 動 作 を さ せ る 方 法 は 、 基 本 的 に 1通 り し か な い よ う に 作 ら れ て い る 。 そ の た め Pythonの プ ロ グ ラ ム は 、 誰 が 書 い て も だ い た い ど れ も 同 じ よ う な コ ー ド に な り 、 作 成 者 以 外 が 見 て も 動 作 を 把 握 し や す い 。 ま た 、 Pythonで は プ ロ グ ラ ム の 文 書 化 ( ソ フ ト ウ ェ ア ド キ ュ メ ン テ ー シ ョ ン ) が 重 視 さ れ て お り 、 言 語 の 基 本 機 能 の 一 部 と な っ て い る 。 

    構 文 

    イ ン デ ン ト ( 「 オ フ サ イ ド ル ー ル 」 ) が 特 徴 的 で あ る 。 

    以 下 に 、 階 乗 を 題 材 に C言 語 と 比 較 し た 例 を 示 す 。 

    Pythonの コ ー ド :

    わ か り や す く 整 形 さ れ た C言 語 の コ ー ド :

    こ の 例 で は 、 Pythonと 整 形 さ れ た C言 語 と で は 、 プ ロ グ ラ ム コ ー ド の 間 に 違 い が ほ と ん ど 見 ら れ な い 。 し か し 、 C言 語 の イ ン デ ン ト は ル ー ル ( 構 文 規 則 上 の も の ) で は な く 、 単 な る コ ン ベ ン シ ョ ン ( コ ー デ ィ ン グ ス タ イ ル ) で し か な い 。 そ の た め C言 語 で は 全 く 同 じ プ ロ グ ラ ム を 以 下 の よ う に 書 く こ と も で き る 。 

    わ か り に く い C:

    Pythonで は イ ン デ ン ト は 構 文 規 則 と し て 決 め ら れ て い る た め 、 こ う し た 書 き 方 は 不 可 能 で あ る 。 Pythonで は こ の よ う な 強 制 を 課 す こ と に よ っ て 、 プ ロ グ ラ ム の ス タ イ ル が そ の 書 き 手 に か か わ ら ず ほ ぼ 統 一 し た も の に な り 、 そ の 結 果 読 み や す く な る と い う 考 え 方 が 取 り 入 れ ら れ て い る 。 こ れ に つ い て は 賛 否 両 論 が あ り 、 批 判 的 立 場 の 人 々 か ら は 、 こ れ は プ ロ グ ラ マ が ス タ イ ル を 選 ぶ 自 由 を 制 限 す る も の だ 、 と い う 意 見 も 出 さ れ て い る 。 

    イ ン デ ン ト に よ る 整 形 は 、 単 に 「 見 か け 」 だ け で は な く 品 質 そ の も の に も 関 係 す る 。 例 と し て 次 の コ ー ド を 示 す 。 

    間 違 え た C:

    こ の コ ー ド は C言 語 の 構 文 規 則 上 は 問 題 無 い が 、 イ ン デ ン ト に よ る 見 か け の ifの 範 囲 と 、 言 語 仕 様 に よ る ifの 実 際 の 範 囲 と が 異 な っ て い る た め 、 プ ロ グ ラ マ の 意 図 が 曖 昧 に な る 。 こ の 曖 昧 さ は 、 検 知 し に く い バ グ を 生 む 原 因 に な る 。 

    ソ ー ス コ ー ド を 読 む 際 、 多 く の 人 は イ ン デ ン ト の よ う な 空 白 に よ っ て 明 確 に 整 列 さ れ た コ ー ド を 目 安 と し て 読 み 、 コ ン パ イ ラ の よ う に 構 文 解 析 し な が ら ソ ー ス を 読 む も の で は な い 。 そ の 結 果 、 一 見 し た だ け で は 原 因 を 見 つ け ら れ な い バ グ を 作 成 す る 危 険 が あ る 。 

    Pythonで は イ ン デ ン ト を ル ー ル と す る こ と に よ り 、 人 間 が 目 視 す る ソ ー ス コ ー ド の 理 解 と コ ン パ イ ラ の 構 文 解 析 の 間 の 誤 差 を 少 な く す る こ と で 、 よ り 正 確 に 意 図 し た 通 り に コ ー デ ィ ン グ す る こ と が で き る と 主 張 さ れ て い る 。 

    デ ー タ 型 

    Pythonの デ ー タ は 動 的 に 型 付 け さ れ る 。 値 自 身 が 型 を 持 っ て お り 、 変 数 は す べ て 値 へ の 参 照 で あ る 。 

    基 本 的 な デ ー タ 型 と し て 、 整 数 型 ・ 多 倍 長 整 数 型 ・ 浮 動 小 数 点 数 型 ・ 複 素 数 型 ・ 文 字 列 型 ・ Unicode文 字 列 型 ・ 論 理 型 、 そ し て 関 数 型 が あ る 。 多 倍 長 整 数 型 は ( メ モ リ の 許 す 限 り ) 無 制 限 の 桁 数 で 整 数 計 算 が 可 能 で あ る 。 

    さ ら に 組 み 込 み の コ ン テ ナ 型 と し て 、 リ ス ト 型 、 タ プ ル 型 、 辞 書 型 ( 連 想 配 列 ) の ほ か 、 値 の 重 複 を 許 さ な い 集 合 型 ( Python 2.3以 降 ) が あ る 。 

    Python 3.x以 降 で は 、 整 数 型 が 多 倍 長 整 数 型 と 統 合 さ れ 、 従 来 の 文 字 列 型 と Unicode文 字 列 型 に 代 わ り 、 バ イ ト 列 型 と 文 字 列 型 が 導 入 さ れ た 。 

    リ ス ト 型 お よ び 辞 書 型 は 内 部 の 値 を あ と か ら 変 え ら れ る ( mutable、 変 更 可 能 ) が 、 タ プ ル 型 は 一 度 構 築 し た ら 内 部 の 値 は 変 わ ら な い ( immutable、 変 更 不 能 ) 。 タ プ ル 型 と リ ス ト 型 は 、 多 く の プ ロ グ ラ ミ ン グ 言 語 で は 配 列 と 呼 ば れ る も の に 類 似 し て い る 。 し か し 、 Pythonで は タ プ ル 型 は 辞 書 の キ ー と し て 使 う こ と が で き る が 、 リ ス ト 型 は 内 容 が 変 わ る た め 辞 書 の キ ー と し て 使 う こ と は で き な い と い う 理 由 か ら 、 こ れ ら 2つ の 型 を 区 別 し て い る 。 集 合 型 に は 変 更 可 能 な も の と 変 更 不 能 な も の の 2種 類 が あ る 。 

    多 く の オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 と 同 様 、 Pythonで は ユ ー ザ が 新 し く 自 分 の 型 を 定 義 す る こ と も 可 能 で あ る 。 こ の 場 合 、 組 み 込 み 型 を 含 む 既 存 の 型 を 継 承 し て 新 た な 型 ( ク ラ ス ) を 定 義 す る 事 も 、 ゼ ロ か ら 全 く 新 し い 型 を 作 り 出 す 事 も 出 来 る 。 

    Pythonは 基 本 的 に メ ソ ッ ド や 関 数 の 引 数 に 型 を 指 定 す る 必 要 が な い の で 、 内 部 で 必 要 と す る 演 算 子 や メ ソ ッ ド に 対 応 し て い れ ば 、 関 数 や オ ブ ジ ェ ク ト の 設 計 時 点 で 意 図 し て い な か っ た オ ブ ジ ェ ク ト を 引 き 渡 す こ と も 可 能 で あ る ( い わ ゆ る ダ ッ ク ・ タ イ ピ ン グ が 可 能 ) 。 

    Pythonは ガ ベ ー ジ コ レ ク シ ョ ン を 内 蔵 し て お り 、 参 照 さ れ な く な っ た オ ブ ジ ェ ク ト は 自 動 的 に メ モ リ か ら 破 棄 さ れ る 。 CPythonで は 、 ガ ベ ー ジ コ レ ク シ ョ ン の 方 式 と し て 参 照 カ ウ ン ト 方 式 と マ ー ク ・ ア ン ド ・ ス イ ー プ 方 式 を 併 用 し て い る 。 マ ー ク ・ ア ン ド ・ ス イ ー プ 方 式 の み に 頼 っ て い る 言 語 で は 、 オ ブ ジ ェ ク ト が い つ 回 収 さ れ る か 保 証 さ れ な い の で 、 フ ァ イ ル の ク ロ ー ズ な ど を デ ス ト ラ ク タ に 任 せ る こ と が で き な い 。 CPythonは 参 照 カ ウ ン ト 方 式 を 併 用 す る こ と で 、 循 環 参 照 が 発 生 し な い 限 り 、 オ ブ ジ ェ ク ト は ス コ ー プ ア ウ ト し た 時 点 で 必 ず デ ス ト ラ ク ト さ れ る こ と を 保 証 し て い る 。 な お Jythonお よ び IronPythonで は マ ー ク ・ ア ン ド ・ ス イ ー プ 方 式 を 採 用 し て い る た め 、 ス コ ー プ ア ウ ト し た 時 点 で 必 ず デ ス ト ラ ク ト さ れ る こ と が 前 提 の コ ー ド だ と Jythonや IronPythonで は 正 し く 動 か な い 。 

    イ テ レ ー タ を 実 装 す る た め の ジ ェ ネ レ ー タ が 言 語 仕 様 に 組 み 込 ま れ て お り 、 Pythonで は 多 く の 場 面 で イ テ レ ー タ を 使 う よ う に 設 計 さ れ て い る 。 イ テ レ ー タ の 使 用 は Python全 体 に 普 及 し て い て 、 プ ロ グ ラ ミ ン グ ス タ イ ル の 統 一 性 を も た ら し て い る 。 

    オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 

    Pythonで は 扱 え る デ ー タ の 全 て が オ ブ ジ ェ ク ト で あ る 。 単 純 な 数 値 と い っ た 基 本 的 な デ ー タ 型 を は じ め 、 組 み 込 み の コ ン テ ナ 型 、 組 み 込 み 関 数 な ど 、 こ れ ら は 全 て 統 一 的 な 継 承 関 係 を も つ オ ブ ジ ェ ク ト で あ り 「 型 」 を も っ て い る 。 こ れ ら の 組 み 込 み 型 と ユ ー ザ 定 義 型 は 区 別 さ れ ず 、 組 み 込 み 型 を 継 承 し た ク ラ ス を 定 義 で き る 。 上 の 「 デ ー タ 型 」 の 項 で 述 べ た よ う に  Pythonは 静 的 な 型 チ ェ ッ ク を 持 た な い た め 、 Javaの よ う な イ ン タ ー フ ェ イ ス と い う 言 語 上 の 仕 組 み は 必 要 と さ れ な い 。 

    ク ラ ス の 継 承  (inheritance) メ カ ニ ズ ム で は 、 複 数 の 基 底 ク ラ ス を 持 つ こ と が で き ( 多 重 継 承 ) 、 導 出 さ れ た ク ラ ス で は 基 底 ク ラ ス の 任 意 の メ ソ ッ ド を オ ー バ ラ イ ド ( override、 上 書 き ) す る こ と が 可 能 で あ る 。 

    ま た 、 オ ブ ジ ェ ク ト に は 任 意 の デ ー タ を 入 れ る こ と が で き る 。 こ れ ら の メ ソ ッ ド や デ ー タ は 、 基 本 的 に 、 す べ て publicで あ り 、 virtual( 仮 想 ) で あ る 。 た だ し 、 先 頭 に ア ン ダ ー ス コ ア を も つ メ ン バ を privateと す る こ と が で き る 。 こ れ は 単 な る マ ナ ー で あ る が 、 ア ン ダ ー ス コ ア を 2つ も つ 場 合 は 、 ク ラ ス の 外 部 か ら メ ン バ の 名 前 を 隠 さ れ た 状 態 ( mangle、 難 号 化 ) と す る こ と で カ プ セ ル 化 を 実 現 で き る 。 ま た 、 利 用 者 定 義 演 算 子 が 機 能 と し て 用 意 さ れ て お り ほ と ん ど の 組 み 込 み 演 算 子 ( 算 術 演 算 子 ( arithmetic operator) や 添 字 表 記 ) は ク ラ ス イ ン ス タ ン ス で 使 う た め に 再 定 義 す る こ と が 可 能 と な っ て い る 。 

    ラ イ ブ ラ リ 

    Pythonに は 「 電 池 が 付 属 し て い ま す ( “Battery Included”) 」 の 思 想 が あ り 、 プ ロ グ ラ マ が す ぐ に 使 え る よ う な ラ イ ブ ラ リ や 統 合 環 境 を あ ら か じ め デ ィ ス ト リ ビ ュ ー シ ョ ン に 含 め る よ う に し て い る 。 こ の た め 標 準 ラ イ ブ ラ リ は 非 常 に 充 実 し て い る 。 

  • 正 規 表 現 、 OSの シ ス テ ム コ ー ル 
  • XML処 理 系 
  • シ リ ア ラ イ ゼ ー シ ョ ン 
  • HTTP、 FTP等 の 各 種 通 信 プ ロ ト コ ル 
  • 電 子 メ ー ル や CSVフ ァ イ ル の 処 理 
  • デ ー タ ベ ー ス 接 続  (SQLiteを 標 準 で 扱 え る )
  • GUIフ レ ー ム ワ ー ク  (Tkinter)
  • HTMLの パ ー サ ー 
  • Python自 身 の コ ー ド の 構 文 解 析 ツ ー ル 
  • サ ー ド パ ー テ ィ に よ る ラ イ ブ ラ リ も 豊 富 に 存 在 す る 。 

  • 行 列 演 算 パ ッ ケ ー ジ の  NumPy
  • 画 像 処 理 の た め の  Python Imaging Library
  • SDLの ラ ッ パ で あ る  Pygame
  • プ ロ グ ラ ミ ン グ 数 学 、 科 学 、 工 学 の た め の 数 値 解 析  SciPy
  • ス ク レ イ ピ ン グ ラ イ ブ ラ リ  Beautiful Soup
  • ク ロ ー リ ン グ 、 ス ク レ イ ピ ン グ 用 の pythonフ レ ー ム ワ ー ク  Scrapy
  • 数 式 処 理 機 能 の  SymPy
  • グ ラ フ 表 示 ソ フ ト  Matplotlib
  • デ ー タ 解 析 ソ フ ト  pandas
  • 離 散 事 象 シ ミ ュ レ ー シ ョ ン  SimPy
  • 機 械 学 習 ラ イ ブ ラ リ  scikit-learn
  • Pythonア プ リ の コ ン パ イ ル に よ る 高 速 化  Numba
  • OpenCLへ の イ ン タ フ ェ ー ス  pyOpenCL
  • OpenGLへ の イ ン タ フ ェ ー ス  pyOpenGL
  • OpenCVへ の イ ン タ フ ェ ー ス  pyOpenCV
  • CUDAへ の イ ン タ フ ェ ー ス  pyCUDA
  • 3Dグ ラ フ ィ ッ ク ス や ア ニ メ ー シ ョ ン  VPyyhon
  • PyODE
  • Cython
  • Python(x,y)
  • マ イ ナ ー な も の ま で 含 め る と 多 す ぎ て 収 拾 が つ か な い 。  Python Package Index (PyPI) と 呼 ぶ 公 式 の パ ッ ケ ー ジ リ ポ ジ ト リ を 導 入 し た 。 

    多 言 語 の 扱 い 

    Pythonは 当 初 1バ イ ト 単 位 で の 文 字 列 型 の み 扱 い 、 か な 漢 字 の よ う な マ ル チ バ イ ト 文 字 を サ ポ ー ト し て い な か っ た が 、 Python 2.0か ら Unicode文 字 型 が 新 た に 導 入 さ れ た 。 

    Python 3.0で は 、 文 字 列 型 が バ イ ト 列 型 に 、 Unicode文 字 列 型 が 文 字 列 型 に 変 更 さ れ た 。 従 来 は 文 字 列 の 表 現 方 法 と し て 2通 り ( 旧 文 字 列 型 と 旧 Unicode文 字 列 型 ) が あ っ た が 、 こ れ を 1通 り ( 新 文 字 列 型 =旧 Unicode型 ) に 統 一 し 、 旧 文 字 列 型 は 単 な る バ イ ト 列 型 と し て 再 定 義 さ れ た 。 こ れ に よ り 、 Python 3.0で 文 字 列 を 扱 う 際 に は 後 述 の 変 換 処 理 を 必 ず 行 う 必 要 が あ る 。 フ ァ イ ル 入 出 力 な ど エ ン コ ー ド を 明 示 し な け れ ば 標 準 エ ン コ ー ド を 用 い て 暗 黙 に 行 わ れ る 場 合 も 多 い 。 こ れ に よ り 多 言 語 の 扱 い を 一 貫 し た も の に し て い る 。 

    Pythonで は 文 字 の バ イ ト 列 表 現 ( エ ン コ ー デ ィ ン グ ) と Unicodeの 内 部 表 現 を 明 確 に 区 別 し て い る 。 Unicode文 字 は メ モ リ 中 に 保 持 さ れ る 抽 象 的 な オ ブ ジ ェ ク ト で あ り 、 画 面 表 示 や フ ァ イ ル へ の 入 出 力 の 際 に は 変 換 ル ー チ ン ( コ ー デ ッ ク ) を 介 し て 特 定 の エ ン コ ー デ ィ ン グ の バ イ ト 列 表 現 と 相 互 変 換 す る 。 ま た 、 ソ ー ス コ ー ド 中 の 文 字 コ ー ド を 認 識 す る 機 能 が あ り 、 こ れ に よ っ て 異 な る 文 字 コ ー ド で 書 か れ た プ ロ グ ラ ム の 動 き が 異 な る と い う 危 険 を 解 消 し て い る 。 

    Pythonで は 変 換 ル ー チ ン を モ ジ ュ ー ル と し て 追 加 す る こ と で 、 さ ま ざ ま な エ ン コ ー デ ィ ン グ に 対 応 で き る よ う に な っ て い る 。 日 本 語 の 文 字 コ ー ド  (EUC-JP, Shift_JIS, MS932, ISO-2022-JP) に 対 応 し た コ ー デ ッ ク も 作 成 さ れ て い る 。 Python 2.4か ら は 、 日 中 韓 国 語 用 の コ ー デ ッ ク が 標 準 で デ ィ ス ト リ ビ ュ ー シ ョ ン に 含 ま れ る よ う に な っ た た め 、 現 在 で は 日 本 語 の 処 理 に 問 題 は ほ と ん ど な く な っ た 。 た だ し GUIラ イ ブ ラ リ で あ る Tkinterや 統 合 開 発 環 境 の IDLEは 、 プ ラ ッ ト フ ォ ー ム に も よ る が 、 ま だ き ち ん と 日 本 語 に 対 応 し て い な い も の も あ る 。 

    ソ ー ス コ ー ド の 文 字 コ ー ド は 、 ASCIIと 互 換 性 が あ り 、 Pythonが 対 応 し て い る も の を 使 用 す る 。 デ フ ォ ル ト エ ン コ ー デ ィ ン グ 以 外 の 文 字 コ ー ド を 使 う 場 合 は 、 ソ ー ス フ ァ イ ル の  1行 目 か  2行 目 に 一 定 の 書 式 で コ メ ン ト と し て 記 述 す る こ と に な っ て お り 、 し ば し ば 以 下 の よ う に Emacsや Vimな ど の テ キ ス ト エ デ ィ タ に も 認 識 可 能 な 書 式 で 記 述 さ れ る ( 次 の 例 は  Emacs が 認 識 で き る 書 式 ) 。 

    利 用 

    Pythonは お も に 欧 米 の 企 業 で よ く 使 わ れ て い る 。 大 企 業 で は マ イ ク ロ ソ フ ト や ア ッ プ ル な ど の パ ッ ケ ー ジ ソ フ ト ウ ェ ア 企 業 を は じ め 、 Google、 Yahoo!、 YouTube な ど の 企 業 も 利 用 し て い る 。 ま た 携 帯 電 話 メ ー カ ー の ノ キ ア で は 、 S60シ リ ー ズ で Pythonア プ リ ケ ー シ ョ ン が 動 く 。 研 究 機 関 で は 、 NASAや 日 本 の 高 エ ネ ル ギ ー 加 速 器 研 究 機 構 で Pythonが 使 わ れ て い る 。 

    適 応 範 囲 は Webプ ロ グ ラ ミ ン グ 、 GUIベ ー ス の ア プ リ ケ ー シ ョ ン 、 CAD、 3Dモ デ リ ン グ 、 数 式 処 理 な ど 幅 広 い 分 野 に 及 ぶ 。 さ ら に ス ク リ プ ト 言 語 と し て の 特 性 か ら 、 従 来 Perlや シ ェ ル ス ク リ プ ト が 用 い ら れ る こ と の 多 か っ た シ ス テ ム 管 理 用 の ス ク リ プ ト と し て 採 用 し て い る OSも 複 数 あ る 。 ま た 、 多 く の 異 な る 言 語 で 書 か れ た モ ジ ュ ー ル を ま と め る グ ル ー 言 語 と し て の 利 用 例 も 多 い 。 実 際 、 多 く の 商 用 ア プ リ ケ ー シ ョ ン で  Python は 組 み 込 み の ス ク リ プ ト 言 語 と し て 採 用 さ れ て い る 。 

    ま た NumPy、 SciPyな ど の 高 速 な 数 値 計 算 ラ イ ブ ラ リ の 存 在 に よ り 、 科 学 技 術 コ ン ピ ュ ー テ ィ ン グ に も よ く 用 い ら れ る 。 NumPy、 SciPyの 内 部 は C言 語 で 書 か れ て い る 為 に 動 的 ス ク リ プ ト 言 語 の 欠 点 の 一 つ で あ る 速 度 の 遅 さ を 補 っ て い る 。 

    教 育 用 

    Pythonは 教 育 目 的 で 設 計 さ れ た わ け で は な い が 、 単 純 さ か ら 子 供 が 最 初 に 学 ぶ 、 プ ロ グ ラ ミ ン グ 教 育 用 の 言 語 と し て も 利 用 が 増 え て い る 。 グ イ ド ・ ヴ ァ ン ロ ッ サ ム は Python設 計 以 前 に 教 育 用 言 語 で あ る ABCの 開 発 に か か わ り 、 教 育 用 と し て の 利 用 に つ い て 期 待 感 を 示 し た こ と も あ り 、 方 針 と し て 非 技 術 者 向 け と い っ た 利 用 を 視 野 に 入 れ て い る と さ れ る こ と も あ る 。 

    私 の 大 好 き な Python利 用 法 は 、 騒 ぎ 立 て ず に 、 言 語 教 育 で プ ロ グ ラ ミ ン グ の 原 理 を 教 え る こ と 。 そ れ を 考 え て く れ ― ― 次 の 世 代 の 話 だ ね 。 — ス ラ ッ シ ュ ド ッ ト ・ ジ ャ パ ン 『  Guido van Rossum へ の イ ン タ ビ ュ ー 』 

    タ ブ レ ッ ト 、 ス マ ー ト フ ォ ン 

  • iPhone / iPad http://applion.jp/iphone/word/python/
  • android http://applion.jp/android/word/python/?md=f
  • フ レ ー ム ワ ー ク 

  • Bottle( ボ ト ル )  – http://bottlepy.org/
  • CherryPy( チ ェ リ ー パ イ )  – http://cherrypy.org/
  • Django( ジ ャ ン ゴ )  – https://www.djangoproject.com/
  • Flask( フ ラ ス ク )  – http://flask.pocoo.org/
  • Pyramid( ピ ラ ミ ッ ド )  – http://www.pylonsproject.org/projects/pyramid/
  • Plone( プ ロ ー ン )  – http://plone.org/
  • Tornado (Webサ ー バ )( ト ル ネ ー ド )  – https://sites.google.com/site/tornadowebja/
  • ※ 参照元:https://ja.wikipedia.org


    /anaconda/3/range/print/class/array/if/for/dict/csv/入門/argparse/assert/append/break/continue/and/boolean/api/インストール/配列/argv/正規表現/機械学習/できること/ai/bottle/ファイル読み込み/関数/文字列/とは/辞書/コメント/リスト/引数/ダウンロード/開発環境/スクレイピング/クラス/資格/ファイル書き込み/改行/チュートリアル/グラフ/演算子/実行/学習/文字列検索/本/文字列比較/バージョン確認/ライブラリ/初心者/意味/タプル/エディタ/ゲーム/乱数/グローバル変数/コンパイル/日本語/コマンドライン引数/モジュール/フレームワーク/リスト追加/画像処理/変数/ファイル削除/絶対値/データ分析/人工知能/アプリ/環境変数/環境/行列/用途/使い方/バージョン/インクリメント/辞書追加/自動化/文字列数値変換/コマンド/配列初期化/入門書/読み方/型変換/構造体/サンプルコード/コマンド実行/型/勉強/デコレータ/内包表記/日付/ファイル/ループ/スライス/変数宣言/言語/オブジェクト指向/機械学習プログラミング/例外/ファイルコピー/デバッグ/時間計測/文字コード/ファイル存在/統計/ディープラーニング/プログラミング/リスト削除/入力/webスクレイピング/改行コード/マルチスレッド/クラス変数/グラフ描画/ヒストグラム/時間/ディレクトリ作成/パッケージ/文法/書籍/インデント/高速化/繰り返し/練習/スクリプト/求人/継承/実行ファイル/現在時刻/データベース/配列宣言/関数引数/正規表現置換/画像表示/基礎/スレッド/開発環境windows/正規表現抽出/カレントディレクトリ/割り算/ランダム/パス/平方根/標準入力/バージョン切り替え/ファイル操作/参考書/メール送信/イテレータ/勉強会/デスクトップアプリ/インストールmac/平均/コード/二次元配列/実行環境/キャスト/ディクショナリ/クラスメソッド/プログラム/入門pdf/入門サイト/辞書ソート/サーバー/オブジェクト/画像認識/エクセル/ドキュメント/エラー処理/累乗/定数/数値計算/ライブラリ一覧/数学/計算/リファレンス/ファイル名/コマンドプロンプト/べき乗/メリット/出力/独学/シリアル通信/何ができる/ゲーム開発/アップデート/メモリ解放/エラー/セミナー/統合開発環境/スクール/リストソート/バイナリ/最新/検定/