Python/
Pythonは高水準の汎用プログラミング言語です。 Pythonの設計思想はコードの読みやすさに重点を置いています。 その構造に対するアプローチは独特であり、例えば、ブロックは波括弧 { } ではなくインデントで構造化されています。
また、Pythonはオブジェクト指向、インタプリタ、動的コーディング、クロスプラットフォームのプログラミング言語です。 これらのアプローチは、プログラマが小規模なプロジェクトから大規模なプロジェクトまで、自明で論理的なコードを書くことができるようにすることを目的としています。
開発環境

Python(パイソン)の処理系はUnix(ユニックス)、GNU/Linux(グヌー・スラッシュ・リナックス)のディストリビューションやmacOS(マックオーエス)には最初から付属していますが、他のオペレーティングシステムには、Pythonの処理系が最初はインストールされていない場合があります。
開発環境

GNU/Linuxのデスクトップ環境の場合、コマンド端末を起動して、コマンド端末の内部でコマンド「python」(あるいは「python3」)を実行すると、次のように「コマンドライン インタプリタ」 が起動します。(コマンド端末の起動と終了のしかたについては、後述します)。
開発環境

「>>> 」のあとに、キーボードによって文字を入力をします。「>>> 」をプロンプトといいます。
開発環境

なお、pythonのこのような入力モードを、「インタラクティブ モード」といいます。
開発環境

インタラクティブ モードを終了したい場合は、コマンド「exit()」を実行します。
開発環境

Windowsの場合、2通りのPythonのプログラミングの方法があります。
開発環境

本書では、後者について説明します。
開発環境

Pythonプログラムの実行方法は、大きく分けると2種類あり、
開発環境

という、2種類の実行方法があります。
開発環境

なお、Windowsでは、Windowsでテキスト エディターにあるプログラムを「python3」コマンドなどで起動する場合、コマンド プロンプトあるいはWindows Terminalから起動します(python付属のコマンド端末ではありません)。
開発環境

では、Pythonによるメッセージ表示を、それぞれの方法で、見ていきましょう。
開発環境

(これはインタラクティブ モードです。)
開発環境

pythonインタプリタで、「ようこそ」とメッセージ表示をしたい場合は、次のようにコマンドを入力します。
開発環境

すると、
開発環境

のように、コマンド端末内に文字が表示されます。
開発環境

文字列の出力はprint()を使います。「()」の中に、出力したい文字列が入ります。 Python 2まではprintは文でしたが、Python 3以降は組込み関数となったため、かっこが必須となります。
開発環境

いっぽう、pythonは、拡張子「.py」のファイル(たとえばファイル名「hello.py」など)を実行するという方法でも、プログラムを実行できます。
開発環境

そのため、あらかじめ、テキスト エディターに、コードを記述して保存しておく必要があります。
開発環境

けっして、Wordなどのワープロソフトには、保存しないでください。ワープロソフトに保存してしまうと、たとえ、あとで拡張子を「py」に書換えても、プログラムが動作しなかったり、あるいはプログラムの内容が変わってしまう場合があります。
開発環境

なので、ワープロソフトではなく、かならず、テキスト エディターに、コードを保存する必要があります。
開発環境

さて、プログラム実行の前に、まず、テキスト エディターを開きましょう。
開発環境

というコードを入力しましょう。
開発環境

そして、入力したコードを、ファイル名「hello.py」で保存しましょう。べつにファイル名は、拡張子がpyであれば、「sample.py」や 「test.py」でも良いのですが、とりあえず本書では、さきほどのコードのファイル名は「hello.py」とします。
開発環境

すると、テキスト エディターの種類によっては、プログラム文である事を認識し、
開発環境

のように、色がつく場合もあります。色のつかない種類のテキスト エディターもあるので、あまり気にしなくても構いません。
開発環境

そして、コマンド端末で、
開発環境

と入力することで、実行できます。拡張子に「.py」をつけるのを忘れないでください。拡張子「.py」がないと、エラーになり、プログラムを実行できません。
開発環境

とにかく、上記のコマンド(python3 hello.py)を実行して、コマンド端末画面に
開発環境

と表示されれば成功です。
開発環境

このように、pythonのプログラムの実行方法には2種類あり、
開発環境

という、2種類の実行方法があります。
開発環境

そして、どちらの実行方法の場合でも、ほとんどのコマンドは共通です。
開発環境

では、さきほどの「ようこそ」と表示するプログラムを実行してメッセージ表示させた直後に、
開発環境

ソースコードだけを書換えてみると、どうなるのでしょうか。
開発環境

さきほどの「ようこそ」と表示するプログラムを実行してメッセージ表示させた直後に、ソースコードのファイル「hello.py」に
開発環境

と入力して、さきほどのソースコードのファイル「hello.py」に上書き保存したら、どうなるでしょうか?
開発環境

「hello.py」で保存した直後に、 コマンド端末で
開発環境

を実行すると、「12345ようこそ」と表示されます。
開発環境

つまり、pythonでは、コマンド python3 hello.pyを実行するたびに、ソースコード(この場合は「hello.py」がソースコード)を解釈しなおします。
開発環境

「pythonがインタプリタである」という事は、上記の例のように、「プログラムの実行開始時に、ソースコードをもとに、毎回、コードを解釈しなおす」という意味です。
開発環境

pythonでは、数値の四則演算(足し算、引き算、かけ算、割り算)ができます。
開発環境

足し算には記号「+」を使用します。引き算には記号「-」を使用します。かけ算には記号「*」(アスタリスク)を使用します。割り算には記号「/」(スラッシュ)を使用します。
開発環境

では、インタラクティブ モード(コマンド端末で1行ずつプログラムを入れるモード)で、計算をためしてみましょう。
開発環境

コマンド端末で「python3」とだけ入力して実行すると、インタラクティブ モードになります。
開発環境

では、計算をためしてみましょう。
開発環境

なお、演算記号の前後に、スペースを入れても、かまいません。演算記号の前後にスペースを入れると、見やすくすることができます。
開発環境

小数点の計算も行えます。
開発環境

負数の計算もできます。
開発環境

インタラクティブ モードを終了するには、「exit()」を入力します。
開発環境

pythonで整数と小数を足したり引いたりすると、自動的に、小数に調節したりします。
開発環境

割り算の商だけを求めたい場合、「//」を使います。
開発環境

算数では「7÷3=2あまり1」なので、上記のような計算結果になります。
開発環境

割り算の「あまり」を求めたい場合は、「%」を使います。
開発環境

指数(べき乗)は「**」です。「^」ではありません。
開発環境

数学では、「2×2×2=8」なので、上記のような計算結果になります。
開発環境

3項以上の数の計算もできますが、計算の順序は、数学と同様に、足し算と引き算の順番よりも、かけ算および割り算の順番が、優先されます。
開発環境

上の計算の場合、さきにかけ算を「2*4」(=8)を行い、それに1をたすので、答えは「9」になります。
開発環境

足し算や引き算を先に行いたい場合は、カッコ「()」を使います。数学と同じように、先に計算させたい部分を、カッコ「()」で囲みます。
開発環境

1+2=3を先に行い、それに4をかけるので、答えは12になります。
開発環境

まず、GNU/Linuxの場合、ディストリビューションに何個もの種類があります。そのディストリビューションの種類により、中に入っているコマンド端末の名前が異なります。
開発環境

しかし、たいてい、最近のディストリビューションには、アプリケーション検索のための画面が用意されているので、そこに「command」とか「コマンド」とか「terminal」(※ 「端末」という意味)とかを入力すれば、そのディストリビューションに入っているコマンド端末アプリが発見されるので、ディストリビューションの指示にしたがって、そのコマンド端末アプリを起動すればいいです。
開発環境

「command」と最後まで入力しなくても、「comm」とか「コマ」あたりまで入力した時点で、目的のコマンド端末アプリが発見されることが多いです。このような機能をインクリメンタル サーチといいます。
開発環境

また、ほとんどのディストリビューションには、コマンド端末が、最初からインストールされているので、わざわざ追加インストールしなくてもいいです。もし試してみて追加インストールを要求される場合、アプリケーションを間違えている場合があります。
開発環境

たとえば、GNU/Linuxディストリビューションの一種「Fedora」を使っている場合なら、最初からコマンド端末がインストールされていて、「端末」というアプリケーション名のアプリが、コマンド端末アプリケーションです。
開発環境

コマンド端末の起動方法は、普通のアプリケーションの起動と同じであり、アイコンをダブルクリックすればいいです。
開発環境

なお、GNU/Linuxのコマンド端末を終了する場合は、右上(もしくは左上)にある「×」マークをクリックすることで、アプリケーションを終了できます。このほか、コマンド端末中に、「exit」と入力しても、コマンド端末を終了できます。
開発環境

まちがって「exit()」(まちがい!)と入力してしまうと、そういう名前の特別な別コマンドだと解釈されてしまい、文字を追加入力する画面になってしまう。その場合、「aaaaaaa」などの無意味な文字を入力して終了させるか、アプリ右上の「×」バッテン印をクリックして終了させましょう。
開発環境

「Hello, world」と表示させるプログラムが、世界のいろいろな国でいろいろなプログラミング言語の入門書で例文としてよく使われます。
開発環境

pythonで「Hello, world!」を表示させる場合は次のようなプログラムになります。
変数とは

pythonでいう「変数」(へんすう)とは、値につけられた名前(識別子)です。
変数とは

ここまでの例では、代数学の「変数」と、プログラミングの「変数」とは、似ているところもありますが違う意味論を持ちます。 Pythonでは変数には文字列のように数値以外とも結びつけること(バインディングすること)ができます。 このため代数学でいう「変数」と、プログラミングでいう「変数」との意味の違いに気をつけてください。
変数とは

Pythonでは変数には型がなく、変数にバインディング(束縛)されたオブジェクトに型があります。
変数とは

などがあります。
変数とは

pythonでは「=」記号は、「左辺の識別子に右辺のインスタンスをバインドする」ことを意味します。 数学の等号とはもちろん、静的型付けの言語の代入とも意味が違いますが、Pythonを含む動的型付けな言語ではこれを代入と呼びます。
変数とは

変数名はべつに1文字でなくてもかまいません。
変数とは

変数の名前には、そのプログラムの使い道にもとづいた名前をつけると、わかりやすくなります。
変数とは

pythonでは、識別子の大文字と小文字とを区別します。 このため、たとえば「print("ABC")」を「PRINT("ABC")」と書くと、エラーになり実行できません。 また、変数名や関数名などの識別子につかえる文字として、英数字とアンダースコア「_」が、識別子として使用できます。 ただし、識別子の先頭の一文字には数字は使えません。
変数とは

キーワード(Keywords)は、Pythonの構文規則の中に現れる特別なトークンで、識別子の様式に合致するにも関わらず、識別子には使用できない単語の集合です。 次に示すキーワードは識別子には使用できません。
変数とは

ソフト・キーワード(Soft keywords)は、識別子の中で、特定の状況下でのみ予約されるものです。 識別子 match、case、_ は、パターン・マッチング文に関連する文脈では、構文的にキーワードとして機能しますが、この区別はトークン化の際ではなく、パーサー・レベルで行われます。 ソフトキーワードであれば、match、case、_を識別子名として使用している既存のコードとの互換性を保ちつつ、パターン・マッチングで使用することができます。
変数とは

予約済み識別子クラス(Reserved classes of identifiers)は、キーワードやソフト・キーワード以外の識別子で特別な意味を持つものです。 予約済み識別子クラスは、先頭と末尾のアンダースコア文字のパターンによって識別されます。
変数とは

アトムは、式の最も基本的な要素です。最も単純なアトムは、識別子またはリテラルです。括弧や大括弧、中括弧で囲まれた形式も、構文上はアトムに分類されます。
変数とは

アトムとして出現する識別子は名前です。
変数とは

名前がオブジェクトにバインドされている場合、アトムを評価するとそのオブジェクトが得られます。名前がバインドされていない場合、評価しようとすると NameError という例外が発生します。
変数とは

組込み関数(例えば print)や、組込み型(例えば int)はキーワードではありません。 キーワードではありませんが、迂闊に組込み関数や組込み型と同じ名前の変数や関数を定義すると、次から関数が使えなくなります。 回避方法はあります。
変数とは

回避方法はあるものの、読んだヒトが混乱するので組込み関数や型と重複した識別子は使わないように心がけましょう。
フォーマット済み文字列リテラル

文字列の入力には、組込み関数input()を使います。
フォーマット済み文字列リテラル

なお、数字(1や2など)を入力しても、文字として認識されます。 たとえば上のプログラムの実行で1を入力すると、出力は11となります(文字列の乗算演算子は文字列をオペランドの個数分繰返した文字列を返します)。
フォーマット済み文字列リテラル

では、数値を入力させて、計算をさせたい場合、どうすればい良いのでしょうか?
フォーマット済み文字列リテラル

文字列を浮動小数点数の数値を得たい場合は、組込み関数float()を使います。
フォーマット済み文字列リテラル

さきほどの数値の入力と計算プログラムを、この方法で、書き換えましょう。
フォーマット済み文字列リテラル

これを実行して、たとえば「5」と入力してエンターキーを押すと、出力として i=5, 2 * i=10 と表示されます。
フォーマット済み文字列リテラル

Python には文字列の中に式を埋込み文字列化する「フォーマット済み文字列リテラル(Formatted string literals; F文字列とも)」があります。
フォーマット済み文字列リテラル

のように、fを引用符の前につける事で利用できます。 引用符は二重引用符でも一重引用符でも、どちらでも構いません(ただし、引用符の開始と終始における引用符の種類は一致している必要があります。)。 JavaScriptなどの「テンプレート・リテラル」に相当する機能です。
フォーマット済み文字列リテラル

F文字列は Pyhon3.6 から導入されました。Python2.x系では利用できません。
フォーマット済み文字列リテラル

場合によってはテンプレートリテラルを使いつつも '{' や '}' 自身を文字列中で使用したい場合があります。 その場合は、'{' は '{{'、'}' は '}}' と二重にします。
フォーマット済み文字列リテラル

式の後に等号'='を付けることで式のテキストと評価後の値の両方を文字列化することができます。
フォーマット済み文字列リテラル

最初に、文字列の % 演算子がありました。
フォーマット済み文字列リテラル

次に、文字列のformatメソッドができました。
条件分岐

Python の制御構造には、逐次・分岐・繰返しの3つがあり。このうち逐次はプログラムが左上から左から右・上から下に進む当たり前の状態ですので、これ以上の説明は必要ないと思います。
条件分岐

条件分岐とは、ある条件を満たすかどうかで、次に実行するプログラムの位置を変えることです。
条件分岐

最も素朴な条件分岐は、単一のif文です。
条件分岐

※なにも表示されません。
条件分岐

つぎに、if文のなかのxの条件を変えてみて、条件が成り立つようにしましょう。
条件分岐

つまり、if文の構文は、次のようになります。
条件分岐

上のコードでは、print("ef")はif文のブロックの外にあることになります。 なぜなら、print("ef")は字下げされてないからです。 なので、プログラムを実行すると「ef」が表示されます。
条件分岐

いっぽう、次のコードでは、結果が変わります。
条件分岐

上のコードでは、print("ef")はif文ブロックの中にあるので、プログラムを実行しても、「ef」は表示されませんし、もちろん「abcd」も表示されません。
条件分岐

ifブロック内は、字下げをそろえないと、エラーになります。
条件分岐

(↑エラーになります。)
条件分岐

下記コードでは、x==2が満たされていないので、インデントされたブロックは実行されません。そのため実行すると「プログラムが終了しました。」だけが表示されます。
条件分岐

条件式には、不等号(>や<など)も使えます。
条件分岐

上のコードを実行すると「xは2よりも大きいよ。」と「プログラムが終了しました。」が表示されます。
条件分岐

記号>のような、値を比較する演算子のことを比較演算子といいます。 pythonで使える比較演算子には、次の表のようなものがあります。
条件分岐

in 演算子は、オブジェクトがコレクションの要素にあるかを返します。
条件分岐

前の節では、if文の条件式によってブロックの実行/否を切り替えました。 ここでは、一歩進めて条件式に合致していなかった場合に別のブロックを実行するelse節を含んだ条件実行構文を紹介します。
条件分岐

なお、elseをつかわないでも、同じ内容の処理が書けます。
条件分岐

else節を使うと、条件式によって2方向にプログラムフローを分けることができました。 実施のプログラムでは、2つ以上の条件式によってプログラムフローを分けることがあります。 そのような場合、次のように条件式ごとにif文が入れ子になります。
条件分岐

このプログラムは意味的には正しいのですがインデントが深くなりすぎ、読むのも修正するのも難儀なので、Python にはelse節の中にif文が入れ子になっていことを表すキーワード elif が用意されています。
条件分岐

Python には、if文の他、if式があります。
条件分岐

「変数xは2より大きくて、5より小さい」ときにだけ実行するような処理は、次のように書きます。
条件分岐

andは、両方の条件が成り立つという意味です。
条件分岐

上記のコードを実行すると、「
条件分岐

」が表示されます。「そうでない場合。」は表示されません。
条件分岐

xを6に変えてみましょう。
条件分岐

上記のコードを実行すると、「
条件分岐

」が表示されます。「xは2より大きくて5より小さいよ。」は表示されません。
条件分岐

演算子 andをもちいて、
条件分岐

のように、使いうことにより、条件式Aと条件式Bが両方とも成り立つ場合に、「条件式A and 条件式B」が成り立つという意味にできます(数理論理学の用語でいう「論理積」です)。
条件分岐

Pythonには、C言語のswitch文はありませんでしたが、Python 3.10 から match 文がサポートされました。
条件分岐

match文は、2021年に導入された新しい機能なので、3.10 より古い3.9以下バージョンのpythonではmatch文は使えません。なので古いバージョンでは、if文などで代用してください。
条件分岐

上の例は、連想配列を使って下のように書き換えることができます。
条件分岐

python では モジュール Enum で列挙型が提供されています。 Enum はclassを用いる方法と、Enum関数を用いる方法の2つがありますが、ここでは class を用いる方法を紹介します。
条件分岐

map = 1 などのブロックの値は、べつに大小が順番どおりである必要はなく、それどころかWindowsで実験した限りは整数値である必要すらもなく小数値や数式ですら代入できてしまうのですが、しかしわざわざ分かりづらい数値を与える必要もないし、今後のバージョンの仕様変更なども想定して、なるべく普通の整数値を与えるのが安全だと思います。
条件分岐

なお、pythonの場合、enum変数をprint出力すると、下記のように格納された変数名(例の場合では"GameMode.menu")が出力されます。
条件分岐

enum変数自体には、「<GameMode.menu: 2>」のように変数名と値の両方のペアが格納されます。
条件分岐

それだけではenum変数を数値演算に活用できず不便なので、enum変数の数値を指定したい場合は下記のように.valueプロパティを指定します。
条件分岐

.nameプロパティは上記のように、GameMode.menu ではなく menu の部分だけを指定します。
条件分岐

他のプログラミング言語では、enum変数のprint表示の形式は違うかもしれないので、それぞれの言語のマニュアルを参照してください。
条件分岐

値をきめるのが面倒な場合、auto をインポートすれば、pythonが自動的にきめてくれます。
条件分岐

メソッド __str__ を定義すると、str() をオーバーロードできます。
条件分岐

列挙子の値は整数でなくてもよく、autoプロシージャを使うまでもなくメッセージ文字列そのものを値とし、値には self.value でアクセスしました。 併せて、クラスメソッドの実装例も追加しました。
条件分岐

繰返しに関するPythonの構文には、while文と for文の2つがあります。
条件分岐

while 文は、ある条件を満たすあいです、処理を繰返します。
条件分岐

上記の while 文の例は、代入演算子をつかうと、
条件分岐

while文はif文と組合わせることもできます。
条件分岐

forのあとの変数(ループ変数と呼ばれます)は、別にiである必要はなく、特に以後値を参照しない場合は _ を使うと慣習的に「参照しないこと」が明示できます。
条件分岐

ただし、あくまで慣習にすぎず、言語仕様上は _ という名前の変数にすぎないので、_ の値を参照するプログラムを書けば実行でき、インタプリターは何の警告もしません。 また、pylint の様な静的なソースコード診断ツールでは、_ は未使用変数のチェックの対象から外されているなど、言語仕様ではないものの _ を特別な識別子として扱う事は慣例的に定着しているので、_ の値を参照するコードを書かないことを強く推奨します。
条件分岐

慣習上、for文を書くときは、i で回数を数えることが多い。
条件分岐

のように、すると、
条件分岐

のように表示されます。 組込み関数 range() は range クラスのオブジェクトを返します。
条件分岐

continue文は、ループの先頭に戻ります。continue文を含むループのブロックのcontinue文以降は実行されません。
条件分岐

pass文は、なにもしません。 「なにもしないが構文上ブロックが要求される」ケースで使われます。
条件分岐

while文あるいはfor文のブロックで文「break」を使うと、ループを中断します。
条件分岐

break文で中断する対象は、if文ではありません。break文は、ループを中断するものです。
条件分岐

なおwhile Trueのように、while直後の条件式をブール値 True にすると、条件式は常に真となり、永久ループとなります。
条件分岐

while文あるいはfor文がbreak文で中断しなかった場合、forにつづくelse節が実行されます。else節は、大概のプログラミング言語ではif文と組合わせて使いますが、Pythonではこれに加え繰返し(while文あるいはfor文)と組合わせることができます。
条件分岐

Pythonでは、ループはスコープを作りません。
演算子の優先順位

式は、演算子と1項以上のオペランド(被演算子)からなります。 典型的には中置の二項演算子式ですが、単項演算子やif式のような式とは思い難い見た目をしているものもありますが、値を持つ構文要素はすべからく式と考えて構いません。
演算子の優先順位

次の表は、Pythonにおける演算子の優先順位を、最も高い優先順位(最も拘束力が強い)から最も低い優先順位(最も拘束力が弱い)へとまとめたものです。同じ枠内の演算子は同じ優先順位を持ちます。構文が明示的に与えられていない限り、演算子は二項演算子です。同じボックス内の演算子は左から右へグループ化されます(右から左へグループ化される指数演算を除く)。
演算子の優先順位

比較、メンバーシップテスト、同一性テストはすべて同じ優先順位を持ち、比較のセクションで説明したように、左から右へ連鎖する機能を持っていることに注意してください。
演算子の優先順位

いくつかの処理をまとめたものを、プログラミングでは「関数」(かんすう)といいます。数学でいう「関数」とは、意味がちがうので、気をつけてください。
演算子の優先順位

なお英語では、数学の「関数」のことを function (ファンクション)といいます。プログラミング用語の「関数」のことも英語では function といいます。
演算子の優先順位

もとの英語をみれば、どちらにも「数」にあたる英語(number 「ナンバー」など)が無いことに、注目してください。
演算子の優先順位

プログラミングの「関数」では、かならずしも、数(整数や小数などの「数」)をつかう必要は、ありません。
演算子の優先順位

さて、pythonでは、ユーザーが自分で関数をつくることができます。ユーザーによる関数の作成には「def」を用います。「def」とは、おそらく定義を意味する英語 definition の頭3文字です。
演算子の優先順位

このように、繰り返し作業をするときなど、関数が便利です。
演算子の優先順位

関数の定義の書式は、
演算子の優先順位

というふうになります。
演算子の優先順位

関数名のあとに、コロン記号「:」をつけるのを、忘れないようにしてください。
演算子の優先順位

関数のプロックは、インデントが終わるまでです。
演算子の優先順位

たとえば下記の関数work()の場合、
演算子の優先順位

関数のブロックは、
演算子の優先順位

までです。
演算子の優先順位

print("c")は、関数work()のブロックの外です。
演算子の優先順位

(実行結果↓)
演算子の優先順位

ある処理を繰返し行いたい場合、関数をつかうことで、記述をへらせます。 関数に作業させる際、関数外で定義された値を、上記のように利用する事ができ、そのような変数を「引数」(ひきすう)といいます。
演算子の優先順位

上記のコードのうち、関数の定義部分は、
演算子の優先順位

↑ この範囲が、関数の定義部分です。
演算子の優先順位

引数のある関数の定義の書式は、
演算子の優先順位

というふうになります。
演算子の優先順位

「引数」は「ひきすう」と読みます。
演算子の優先順位

下記のように、呼び出し時に引数の値を「menseki(3,5)」のように指定することもできます。
演算子の優先順位

このようにpythonでは、関数内で数を置きかえる動作は、原則として、関数外の動作に影響を与えません。
演算子の優先順位

組込み関数idを使うとオブジェクトのidを得ることができます。 2つの変数同士のidが同じ場合、2つの変数は同じオブジェクトにバインドされています。 大概の型のオブジェクトのidはメモリー上のアドレスですが、整数のようにそうではない型も少数ながらあります。
演算子の優先順位

関数の戻り値(return value;返り値・返却値とも)は、return 文で返します。
演算子の優先順位

return文があると、その行で関数が終了します。
演算子の優先順位

関数の仮引数には名前(識別子)がありますが、仮引数を明示して関数の実引数を渡し呼出すことができます。 このような識別子を明示して呼びされた実引数をキーワード引数と言います。
演算子の優先順位

関数の引数には、既定値(ディフォルト)を設けることができます。
演算子の優先順位

関数の引数は可変長にできます。
演算子の優先順位

Pythonには、厳密な意味での多値返却はありませんが、タプルやリストを返すことで多値返しに近いことができます。
演算子の優先順位

「多値返却風な処理」や「多値返しに近いこと」と歯切れが悪いのは、型アノテーションを
演算子の優先順位

としたいのですが、
演算子の優先順位

としなければならず、タプルを返していることを明確に意識する必要があるからです。
演算子の優先順位

デコレーター(decorator)は、関数の内容を書き換えずに修飾するための仕組みです。 関数の引数に関数を指定します。既存の関数の前に@{デコレーター名}を付けることで、その関数を修飾することができます。
演算子の優先順位

デコレターの文法は、以下のような糖衣構文です。
演算子の優先順位

ローカル変数や仮引数にグローバル変数がシャドーイングされた場合、 関数の中でも、
演算子の優先順位

と変数宣言することにより、その変数をグローバル変数として取り扱えます。
演算子の優先順位

C言語には、このような機能(関数内で変数をグローバル宣言する機能)は、ありません。 C++では、グローバル変数の参照に :: を前置することでシャドーイングを回避できます。
演算子の優先順位

nonlocal文は、内包関数から、自分を呼び出した関数のローカル変数にアクセスする仕組みです。 global文と違い、新たな変数を作ることはできません。
演算子の優先順位

クロージャ(関数クロージャ)は、外側の変数を格納する関数です。
演算子の優先順位

この絵柄に見覚えがある人もいると思います。デコレーターの引数(デコレート対象の関数)はラッパー関数は格納した変数です。
スライス記法

Pythonでは、複数のオブジェクトを要素として持つオブジェクト(=コレクション)のうち、整数のインデックスによって要素を参照できるオブジェクトのグループをシーケンス(sequence)と呼びます。 組込み型の代表的なシーケンスは、リスト、タプル、レンジ オブジェクトです。
スライス記法

シーケンスに共通の機能として、スライス記法があります。
スライス記法

組込み関数hasattr(obj, name)を使うと、オブジェクトobjが名前nameな属性を持っているかの検査ができます。
スライス記法

リストの要素は、文字列だけ、あるいは数値だけでも、かまいません。
スライス記法

文字列だけのリストの場合、たとえば
スライス記法

また、リストは数値と文字が下記のように混在することも、別々の項なら可能です。
スライス記法

他のプログラミング言語だと、数値と文字列とが混在するデータ構造をつくるのにクラスを使わないといけない言語もありますが、しかしPythonではクラスを使わずとも、リストだけで数値との共存が可能です。
スライス記法

リストは、for文の対象となるコレクションとして使えます。
スライス記法

リストの要素に、あとから追加することもできます。
スライス記法

python のリストを希望の数だけ予め確保するには、myList = [0] * 100 の様に、初期値を持った配列に乗算演算子を作用し、所望の個数を指定した式の値を与えます。
スライス記法

勿論、律儀に要素を1つづつ追加する方法も有効です。
スライス記法

リストの要素を、あとから削除することもできます。次のコードのようにpop()を使うと、リスト末尾の要素を削除できます。
スライス記法

要素の末尾を削除したいリストのうしろに「.pop()」をつけ、ることで、要素の末尾を削除していけます。
スライス記法

なお、この.pop()のような、操作したい対象物のうしろにドット記号(.)と操作内容のキーワードをつける特別な関数のことをpythonでは、「メソッド」といいます。
スライス記法

myList.pop()をくりかえすと、さらに末尾から、削除していきます。
スライス記法

リスト( list )は、任意のオブジェクトをゼロ個以上、順次付けて保持できるコレクションです。
スライス記法

リストは、要素を ,(カンマ) で区切り全体を [ ] で囲みます。 要素の型は同じである必要はありません。
スライス記法

リストの各要素を、代入・置き換えすることもできます。
スライス記法

リストの中にリストを入れることも出来ます。ただし、下記のように入れたリストの項目数が等しくなるようにする必要があります。
スライス記法

リストの中にリストを入れたものを2次元リスト(または2重リスト)といい、
スライス記法

リストの中にリストを入れたもののなかに、さらにリストを入れたものを3次元リストと言います。
スライス記法

組込み関数mapを使うと、iterableオブジェクトの全ての要素に、一括で何かの関数を適用する事ができます。
スライス記法

abs のような組込み関数だけでなく、ユーザー定義関数やlambdaもmap関数の第一引数にすることができます。
スライス記法

組込み関数filterは、iterableオブジェクトの要素の中から、条件に適合するものだけを選び出して、新たなリストを作ります、
スライス記法

上記のmap関数とfilter関数の使用例はリスト内包表記をつかうと
スライス記法

と表現できます。 for式やif式、if-else式(条件演算子)はリスト内包表記と組合わせると関数呼出しを使わないでもイテレーションやケース分けができます。
スライス記法

絶対値を求める部分も、
スライス記法

とインラインで表現できます。
スライス記法

他のプログラミング言語とPythonの類似点と差異をリストを中心に比較します。
スライス記法

宣言と初期化の部分に注目し様々な差異がありましたが、要素の参照は、
スライス記法

の構文で、この部分はどの言語でもほぼ同じですが、FortranとBASICでは、
スライス記法

のように丸括弧になります。
スライス記法

Pythonに「配列」というデータ型は存在しません。C言語などに、配列というデータ型があります。
スライス記法

言語によっては、「配列」データ型と「リスト」データ型とが別個に存在するものもあります(たとえば Kotlin という言語には、配列(array)データ型と、リスト list データ型とが別々に存在します) なお、kotlin は現在では、Android スマートホンのアプリケーションプログラムの開発などで、よく使われる言語です。
スライス記法

また、Goには「リスト」はなく「スライス」slice があります(Goのスライスの機能はPythonやkotlinの「リスト」と一見似ていますが、Goのスライスは「要素の型が一致している必要がある」ので本質的に「リスト」とは違い、異種リストの実装には interface{} を使います)。
スライス記法

Goには、配列型と「スライス」slice の2つのデータ型がありよく混同されますが、スライスは要素のアクセスは線形時間 O(n)、配列の要素のアクセスは定数時間 O(1)であることが大きな違いです。
スライス記法

リストや配列に類似した型は、要素の参照にかかる時間によって
スライス記法

タプル( tuple )は、任意のオブジェクトをゼロ個以上、順次付けて保持できるコレクションです。 リストとよく似た特徴がありますが、リストと違い生成後は内容が変更できない「イミュータブル」なオブジェクトです。
スライス記法

メソッドセットはリストに準じますが、イミュータブルなので append clear copy extend insert pop remove reverse sort の9つのメソッドはありません。
スライス記法

レンジ( range )は、等差数列を表すシーケンスです。
スライス記法

レンジにリテラルはありません。 コンストラクターである組込み関数 range()を使って生成します。
スライス記法

レンジは、for文の対象となるシーケンスとして使えます(これが一番一般的な使用例でしょう)。
スライス記法

array モジュールは、同一の型の要素をもつシーケンスを提供します。 JavaScript の TypedArray や、C言語等の静的型付けの言語の配列に相当します。
スライス記法

arrayオブジェクトは、arrayモジュールのarray() です。
スライス記法

arrayの各要素を、代入・置き換えすることもできます。
コンストラクターとリテラル

Pythonの辞書(Dictionary)は、任意個のキーとコレクションです。
コンストラクターとリテラル

Pythonでは、辞書のキーの重複は許されず、最後の値で上書きされます。 これは辞書リテラルにも当てはまり、同じキーの最も右の値がリテラル内のキーの値となります。
コンストラクターとリテラル

セット(set; 集合)は、一意で不変のオブジェクトの、順不同の有限集合を表します。 そのため、どのような添え字でもインデックスを付けることはできません。 しかし、反復処理することは可能で、組込み関数len() は、セット内のアイテムの数を返します。 集合の一般的な用途は、高速なメンバーシップテスト、シーケンスからの重複の除去、および交叉、和集合、差集合、対称差などの数学的操作の計算です。
コンストラクターとリテラル

keys(), values(), items()の返すオブジェクトは、それぞれキー、値、キーと値のペアーのタプルのイテレータブルですが、関数から返った値は辞書とその後も結びついています(これらのオブジェクトをセット・ビュー オブジェクトと呼びます)。 リストのように静的なオブジェクトではありません。
コンストラクターとリテラル

破壊的メソッドは、レシーバーであるセットオブジェクト自体を変更するメソッドです。
モジュールmath

モジュール化(modularization / modularize)は、全体をいくつかの構成単位に分割し、問題の規模と質を低減する分割統治法(divide-and-conquer method)の一つです。 Pythonでは、パッケージ(package)とモジュール(module)がモジュール化の実現に用いられます。 このうち、パッケージはモジュールの構造的な整理手段と考えられ、まずモジュールの用途・用法について解説し、モジュールをユーザーが定義する具体的な例も示します。
モジュールmath

平方根などの数学に関する関数を使用したい場合は、モジュールmathをインポートします。
モジュールmath

また、インポートされた関数をつかうときは、どのモジュールに由来する関数かを、pythonが判断できるようにするために、「math.sqrt()」のように、関数の前にモジュール名を書きます。 「.」はドット記号です。つまり、「モジュール名.関数名」のような書式になります。
モジュールmath

モジュールmathでは、三角関数や指数関数なども、使えます。三角関数の単位は、ラジアンです。
モジュールmath

サイコロの目のような、乱数をつかうには、モジュールrandomをインポートします。
モジュールmath

たとえばモジュールmathから、sqrtだけをローカル名前空間へインポートしたい場合、コードが次のようになります。
モジュールmath

ここまでは、標準ライブラリーのモジュールを紹介してきましたが、モジュールはユーザー自身で定義することもできます。
モジュールmath

ここでは、与えられた数が素数か否かを判定するモジュール isprime を作ってみましょう。
モジュールmath

try と except のある構文を用いて、例外が発生した時の処理を記述できる。
モジュールmath

例外の起きそうな処理を、tryブロックに書く。tryブロック内で数値を0で割るなどの処理が発生すると、エラーとして認識され、exceptブロックの処理にうつり、exceptブロック内の処理が行われる。
モジュールmath

上記のプログラムでは、もし0で割るなどの例外が発生すると、exceptブロックにある処理が実行されるので、「エラーが発生しました。」が表示される。また、print(a)が実行されるよりも先にエラーが発生するため、先にexceptブロックに処理が移るので、計算結果の3 / xは表示されない。
モジュールmath

なお、もし正常に数値を入力するなどして、例外が発生しなければ、けっして「エラーが発生しました。」は表示されずに、3 / xの計算結果が表示される。
モジュールmath

たとえば、入力の数値として、数「2」を入力すると、3 / 2の計算結果である「1.5」が表示され、そのままプログラムが終わる。
モジュールmath

なお、tryブロックの外で例外が発生しても、exceptには処理は移動せずに、プログラムのエラーにより終了する。
モジュールmath

たとえば、上記のプログラムで、「0」を入力すると、「エラーが発生しました。」は表示されない。0を入力してエンターキーを押した直後に、インタープリターによりエラーメッセージ「ZeroDivisionError: division by zero」などのメッセージが表示され、そしてプログラムは終了する。
モジュールmath

elseブロックの処理は、例外が発生しなかった場合に、最後に行われる処理である。
モジュールmath

finallyブロックの処理は、例外が発生しても発生しなくても、どちらの場合にも、最後に行われる処理である。
モジュールmath

pythonの例外処理では、生じた例外クラスに応じての場合わけもできます。
モジュールmath

のように、生じた例外クラスにおうじて、exceptのあとに例外クラスを指定します。
モジュールmath

「ゼロで割り算できない」という例外の場合は組込み例外 ZeroDivisionError を、exceptの直後に記述することにより、例外クラスを指定します。
モジュールmath

よって、この部分のコード記述は、
モジュールmath

のようになります。
モジュールmath

ほかにも例外クラスはあります。例外クラスが、型(かた)についてのエラーの場合には組込み例外 ValueErorrを、exceptの直後に記述することにより、例外クラスを指定します。なお、「型」とは、「整数型」とか「文字列型」とかのことです。
モジュールmath

つまり、この場合の、この部分のコード記述は、
モジュールmath

のようになります。
モジュールmath

まとめると、
モジュールmath

のようになります。
モジュールmath

なお、エラーを種類を指定するキーワードは、上記のZeroDivisionError や ValueError の他にも、たくさん、あります。
モジュールmath

__builtins__ の要素のうち BaseExceptionのサブクラスを例外とし、例外と例外の __doc__ を表にしました。
モジュールmath

クラス(Classes)は、オブジェクト指向ブログラミング言語の分類の1つ「クラスベースのオブジェクト指向ブログラミング言語」の対象となる概念です。 Pythonもクラスベースのオブジェクト指向ブログラミング言語です。
モジュールmath

クラスは、データや機能の集まりを提供する手段です。 新しいクラスを定義すると、そのクラスの新しいインスタンスを作成することができるようになります。 クラスの各インスタンスは、その状態を維持するために属性をもつことができます。 クラスのインスタンスは、属性を参照したり変更したりするためのメソッドを持つこともできます。
モジュールmath

クラスにはインスタンスの持つ属性として関数も持つことができます。この関数属性のことをメソッドと言います。 メソッドを定義するには、関数を定義したようにクラス定義中にdefで定義します。メソッドの第一引数はselfで、インスタンス自身です。
モジュールmath

前節の Car.get_colour() のようなクラスの属性の値を返す関数をゲッター、Car.set_colour() のようなクラスの属性の値を返す関数をセッターと呼びます。
モジュールmath

ゲッター・セッターは、クラスの実装の内部構造隠蔽を目的としていますが、上記のコードでは、
モジュールmath

このような場合はクラスプライベートな識別子を使います。 クラスプライベートな識別子は特別な構文があるわけではなく、属性の最初の2文字を '__' にするだけです。
モジュールmath

これで、ゲッター・セッターを経由しなければ、__colour を参照できなくなりました。 ゲッター・セッターには、値の変換や型や範囲のチェックなど、追加の価値を付加することができます。
モジュールmath

ゲッター・セッターで、内部構造の隠蔽は果たせましたが、セッター・ゲッターはメソッドなので値の参照や変更(代入など)のたびにメソッド呼出しが必要で、コードの量が増えると負担に感じてきます。 そこで、@property と @*.setter を適用すると、通常の参照や変更の構文を使えるようになります。
モジュールmath

@property や @colour.setter はPythonのキーワードではなく、デコレーターという仕組みを使っています。
モジュールmath

特殊メソッド(special method;マジックメソッド magic method とも)は、加算などの型に対する特定の操作を実行するためにPythonから暗黙的に呼び出されるメソッド。 このようなメソッドは、ダブルアンダースコアで始まり、ダブルアンダースコアで終わる名前を持っています。
モジュールmath

Pythonのコミュニティは、メソッドがNoneを返すことを推すなどメソッド・チェインには否定的ですが、クラス×メソッドの仕組みはメソッド・チェインと親和性が高いです。
モジュールmath

Ruby#ユーザー定義クラスをPython3に移植しました。
モジュールmath

ここまでは、インスタンスの属性だけ扱って来ましたが、インスタンスではなくクラスに属する属性があります。 これをクラス変数と呼びます。
モジュールmath

このように、クラス変数は参照と同じ構文で変更(左辺値化)すると、新しくインスタンス変数は生えてきてしまい、発見困難なバグの原因になります。 では、毎回 クラス名 . 属性 の構文を使えば良いようですが、クラスが継承された場合に基底クラスの属性か派生クラスの属性かで齟齬が生じるので、(特にメソッドでは)__class__ を使って参照・変更を行うべきです。
型アノテーション

Python は、動的型付けの言語で変数・関数の仮引数や関数の戻り値には型を指定する必要がありません(指定する方法が、従来は存在しませんでした)。
型アノテーション

この性質は、普遍的なアルゴリズムを書くなどの用途に適していますが、たとえば、リストの値の合計を求めるつもりで書いた関数が、文字列を要素とするリストに適用さるとリストの要素を連結した文字列を返すなど、コードを書いたときの想定とは異なる使われ方をしたとき、劇的に違う実行結果を招いてしまうことがあります。
型アノテーション

型アノテーション(Type Annotation;型注釈とも)は、変数・仮引数・戻り値の型を示す注釈です。 型アノテーションは pyhthon 3.5 からは構文解析の対象ですが、型の検査はpythonインタープリターでは行われず、外部プログラムの MyPy などで静的に行います。
型アノテーション

型ヒント・型アノテーションは、まだ新しい機能で typing モジュールを import しない方向に進化しつつあり、今後の動向が注目されます。
型アノテーション

オーブジェクトの型アノテーションについては、__annotations__ 属性によって Python プログラム中からアクセスできます。
型アノテーション

ファイルを書くにも読むにも、まず、そのファイルを開く必要があります。 ファイルを開くには、組込み関数 open() を使います。 もしopen()をするときにその名前のファイルがなければ、ファイルを作成されます。
型アノテーション

open()の2番目の引数にある「"w"」は、「書込みモード」という意味です。 open()の戻り値は f に保持されます(f の型は _io.TextIOWrapper クラスです)。
型アノテーション

ファイルに書込むには open() の戻り値 f を組込み関数 print() のキーワード引数 file に与えます。 組込み関数 print() は今まで何度も出てきましたが、キーワード引数 file には何も指定していなかったのでディフォルトの sys.stdout (標準出力)が仮定されていました。
型アノテーション

オープンしたファイルは必ずクローズする必要があります。 この例では、with文を使っているのでブロックを抜けると自動的にクローズされます。
型アノテーション

カレントディレクトリを見ると、「create.txt」という名のファイルが作成されており、開くと「hello」と書かれているはずです。
型アノテーション

ここでは組込み関数 open() の第二引数『モード』を与えていませんので、ディフォルトのモード "r"(読込み)になります。 open() の戻り値 f をレシーバーにメソッド readline() を呼び出すと、ファイルから1行ずつ読み込むことができます。
型アノテーション

上の例では、ファイルから一行だけ読み込み表示していましたが、全ての行を表示するには
型アノテーション

のように for文 を使います。 print() 関数のキーワード引数 end に を渡しているのは s には改行が含まれているため、 print() のディフォルトの動作「改行を追加する」をキャンセルするためです。
組込み関数の一覧

Pythonインタープリターには、常に利用可能な関数や型がいくつか組込まれています。
組込み関数の一覧

組込み関数 abs(x) は x の絶対値を返します。
組込み関数の一覧

組込み関数 all(it) は、iterableオブジェクトitの要素がすべて真のときにTrueを返し、1つでも偽があればFalseを返します。
組込み関数の一覧

組込み関数 any(it) は、iterableオブジェクトitの要素がすべて偽のときにFalseを返し、1つでも真があればTrueを返します。
組込み関数の一覧

組込み関数 ascii(obj) は、組込み関数 repr(obj) と同様に,オブジェクトobjの印刷可能な表現を含む文字列を返しますが,repr()が返す文字列中の非ASCII文字を,\x, \u, \Uを用いてエスケープします。
組込み関数の一覧

組込み関数bin(i)は、整数iを2進数文字列に変換します。
組込み関数の一覧

組込み関数bool(obj)は、オブジェクトobjを真理値に変換します。
組込み関数の一覧

組込み関数callable(obj)は、オブジェクトobjが呼出し可能かを返します。
組込み関数の一覧

組込み関数float(x, base)は、数値または文字列xから構成される浮動小数点数を返します。
組込み関数の一覧

組込み関数hex(i)は、整数iを16進数文字列に変換します。
組込み関数の一覧

組込み関数input(prompt)は、標準入力から1行を読込み、それを文字列に変換して(末尾の改行を取り除いて)返します。
組込み関数の一覧

組込み関数int(x, base)は、引数xを基数baseで整数に変換します。
組込み関数の一覧

組込み関数oct(i)は、整数iを8進数文字列に変換します。
組込み関数の一覧

組込み関数 pow は累乗を返します。
組込み関数の一覧

modが存在する場合、baseをmodulo modのexp乗にします(pow(base, exp) % modよりも効率的に計算されます)。2つの引数形式pow(base, exp)はべき乗演算子の使用と同等です: base**exp。
組込み関数の一覧

引数は数値型でなければなりません。オペランドの型が混在する場合、二項演算子の強制適用規則が適用される。int 型のオペランドでは、2 番目の引数が負でない限り、結果はオペランドと同じ型になります(強制適用後)。たとえば、pow(10, 2)は100を返しますが、pow(10, -2)は0.01を返します。int型またはfloat型の負の基数と非積分指数に対しては、複素数の結果が返されます。例えば、pow(-9, 0.5)は3jに近い値を返します。
組込み関数の一覧

int 型のオペランド base および exp に対しては、mod が存在する場合、mod も整数型でなければならず、mod は 0 以外でなければなりません。modが存在し、expが負の場合、baseはmodに対して相対的に素でなければなりません。この場合、pow(inv_base, -exp, mod) が返され、inv_base は base の mod の逆数です。
組込み関数の一覧

組込み関数 print は引数のオブジェクトを文字列化しテキストストリームに書出します。
組込み関数の一覧

組込み関数 range() は、組込み型 Range クラスのコンストラクターです。
組込み関数の一覧

組込み関数 repr(obj) は、オブジェクトobjの印刷可能な表現を含む文字列を返します。
組込み型の概観

Pythonインタープリターには、常に利用可能な関数や型がいくつか組込まれています。
組込み型の概観

Pythonは動的型付けな言語です。変数には型がなく変数の示すオブジェクトが型を持ちます。 これはPythonの興味深い特徴であり、PythonはLispやSchemeなどのような特殊な言語群の一部となっています。
組込み型の概観

一方、静的型付けな、C言語やJavaなどのコンパイル言語の場合には、最初に変数の名前と型を宣言してから、内容を割当てる必要があります。 これはコンパイル作業を最適化することができるので、これらの言語にとっては好ましいことです。
組込み型の概観

他方、動的型付けは、特にメタプログラミングや再帰性(Reflexivity)のような高レベルの論理構成を簡単に書くことができます。 またポリモーフィズムを実践するためには、リストや辞書などの充実したデータ構造の使用が役に立ちます。
組込み型の概観

数値には、int(整数)、float(浮動小数点数)、complex(複素数)の3種類があります。 標準ライブラリには、有理数を表すfractions.Fractionと、ユーザーが精度を定義できる十進数浮動小数点数を表すdecimal.Decimalという追加の数値型があります。
組込み型の概観

整数型 int はPythonの組込み型です。 整数の精度は無限です。
組込み型の概観

論理型 bool はPythonの組込み型です。 論理型は整数のサブタイプでもあります。
組込み型の概観

浮動小数点型 float はPythonの組込み型です。 浮動小数点数は、通常Cではdoubleを使って実装されています。 プログラムを実行しているマシンの浮動小数点数の精度や内部表現についての情報は、sys.float_infoにあります。
組込み型の概観

複素数型 complex はPythonの組込み型です。 複素数には実数部と虚数部があり、それぞれが浮動小数点数になっています。 複素数zからこれらの部分を抽出するには、z.realとz.imagを使用します。