Python Tutorial

Overview

Course:Python tutorial, PyCon JP 2011
Presenter:ENDOH takanao
Intended audience:
 Programmers who want a fast introduction to the basics of Python.
Tutorial format:
 Frequently alternating presentation of concepts and exercise sets. Each pair of concepts and exercises ranges in length from 5 minutes on simple topics, to 20 minutes on more involved topics.
Requirements:A laptop computer with Python 2.7 installed.
License:MIT

はじめに

実際に動いているものを見て、自分で動かして学んでいきます。 Pythonの対話的インタプリタを頻繁に使用します。

意図的に、エラーが発生する例もいくつか含まれています。 これは、Pythonがエラーを処理する方法を学ぶためで、実際にPythonを使う場面で切り分け作業をする場合に役立ちます。

これらテキストのPythonコードを、Pythonインタープリタへ入力することにより、より多くのことを自分自身でを学ぶことができます。 オンラインでこれらの演習テキストを提供しています。

python-tutorial-ja.rtfd.org

質問は随時受け付けます。お気軽に申し出てください。

Note

演習 のセクションでは、式を入力する前に、何が起こるか何が表示されるか予測してみましょう。 そして式を実行し、どんな結果が得られたか確認してみましょう。

Table Of Contents

  1. Python Tutorial
  2. Overview
  3. はじめに
  4. 数値
  5. 文字列
  6. 文字列オブジェクトのメソッド
  7. プリントと文字列フォーマット
  8. str, repr
  9. タプル、リスト
  10. シーケンスのインデキシングとスライシング
  11. リスト内包表記
  12. 加工して、並べ替えて、元に戻す
  13. オブジェクトと変数
  14. 辞書オブジェクト
  15. ブロック、forループ
  16. イテレータ式、ジェネレータ式
  17. スクリプト、モジュールを書く
  18. 関数の定義と呼び出し
  19. ジェネレータ
  20. オブジェクト参照
  21. クラスとインスタンス
  22. 例外

数値

演習:

高度な演習:

文字列

演習:

ユニコード:

文字列オブジェクトのメソッド

演習:

真為値は、大文字で始まります。

プリントと文字列フォーマット

演習:

str, repr

演習:

reprは、eval実行できるような引用符を追加します。

タプル、リスト

演習:

reverse と sort メソッドは、リストオブジェクトを操作し返り値を返しません。 逆に、reversed と sorted 関数は、与えられたリストオブジェクトはそのままにし、新しいシーケンス(実際にはジェネレータ)を返り値として返します。

シーケンスのインデキシングとスライシング

演習:

インデキシングとスライシング操作をする場合は、文字列とタプルは不変オブジェクトであることに気をつけましょう。

リスト内包表記

演習:

加工して、並べ替えて、元に戻す

Decorate, Sort, Undecorate (DSU) Idiom

オブジェクトと変数

ここで、ローカルの名前空間を空にするため、Pythonを再起動します。

Pythonではすべてがオブジェクトであり、次の項目を持っています:

  • 単一のID(メモリアドレス)
  • 単一の値
  • いくつかの属性
  • 単一の型
  • ひとつ、またはいくつかの名前(ひとつ以上の名前空間)
  • ひとつ以上の基底クラス

演習:

ローカルの名前空間を空にするため、Pythonを再起動します。

辞書オブジェクト

演習:

ブロック、forループ

演習:

高度な演習:

イテレータ式、ジェネレータ式

  • forループでは、反復可能オブジェクトを扱います。

  • iter() 関数は、イテレータを生成します。

  • StopIteration例外が送出されるまで、イテレータオブジェクトの next() メソッドが繰り返し呼び出されます。

  • iter(foo) は、

    • foo.__iter__() が存在する場合、それが呼び出されます。
    • foo.__getitem__ が存在する場合、ゼロからインデキシングし、 IndexError 例外を補足して StopIteration 例外を送出します。

演習:

スクリプト、モジュールを書く

  • #!/usr/bin/env python を1行目に書きます
  • 拡張子は、 .py
  • 高速に実行するため .pyc が生成されます

play1.py:

#!/usr/bin/env python

x=3
y=2
print(x + y)

play2.py:

#!/usr/bin/env python

s = 'abc'
t = 'def'

def play():
    return s + t

play()

play3.py:

#!/usr/bin/env python

def play(args):
    pass      # Put code here.

def test_play():
    pass      # Put tests here.

if __name__ == '__main__':
    test_play() # This doesn't run on import.

演習:

play.py を作成して、モジュールをロードし、実行してみましょう。

関数の定義と呼び出し

演習:

Define a function triple(n) in a module triple.py such that triple.triple(3) returns 9. Import triple and try it out. Extend the plural function above to handle proper nouns (that start with a caiptal letter) that end in ‘y’, for example the correct plural of “Harry” is “Harrys”.

ジェネレータ

これは実行しないでください!

list(f)

なぜか、考えてみましょう。

次の2つの例を比較してみましょう:

2つの例とも、使用方法は同じであることに注目してください:

演習:

無限にゼロを返すジェネレータを書いてみましょう。

オブジェクト参照

クラスとインスタンス

名前空間とは、Pythonオブジェクトへマッピングされた名前です。 スコープとは、検索可能な名前空間の範囲です。 名前空間を検索する順は、:

  1. ローカル変数、関数定義の中
  2. モジュール、グローバル変数
  3. ビルトイン(built-ins)

名前空間の変更(代入、import、def、del)は、ローカルスコープでおこなわれます。 参照: http://docs.python.org/tutorial/classes.html#python-scopes-and-name-spaces

  • クラス文は、新しい名前空間を作成し、名前の割り当てはクラスのオブジェクトへバインドされます
  • インスタンスは、 ClassName() または ClassName(parameters) を呼び出すことによって作成されます

point1.py:

class Point(object):
    """Example point class"""

    def __init__(self, x=0, y=0):
        # Note that self exists by now
        self.x, self.y = x, y

    def __repr__(self):
        return 'Point({0}.x, {0}.y)'.format(self)

    __str__ = __repr__

    def translate(self, deltax=None, deltay=None):
        """Translate the point"""
        if deltax:
            self.x += deltax
        if deltay:
            self.y += deltay

演習:

Write a class Employee that tracks first name, last name, age, and manager.

Review: Classes

  • Class creates a new namespace and a new class object, and wires them for inheritance.
  • クラスオブジェクトを呼び出すと、インスタンスを生成します。
  • If attribute lookup finds a method then a method object is returned. It handles sending self to the function.
  • クラスは、単純なレコードとして使用することができます。
  • モジュールおよび関数も、属性を持つことができます。

例外