2: 2016-07-23 (土) 11:41:20 njf |
3: 2016-12-27 (火) 09:12:52 njf |
- | Pythonを始めて、インデントの制御構造の他に最初に何それと思うのがタプル。 | + | Pythonを始めて、インデントの制御構造の他に最初に何それと思うのがタプルでしょう。 |
| | | |
- | 簡単に言うと、リスト=普通の配列、タプル=変更できないリスト | + | 簡単に言うと、「リスト=普通の配列」、「タプル=変更できないリスト」です |
| + | |
| + | リストは変更可能で、 |
| | | |
- | リストは変更可能 | |
| >>> a = [1,2,3] | | >>> a = [1,2,3] |
| >>> a[2] = 10 | | >>> a[2] = 10 |
| [1, 2, 10] | | [1, 2, 10] |
| | | |
- | タプルは変更しようとするとエラー | + | 一方、タプルは変更しようとするとエラーが発生します。 |
| >>> a = (1,2,3) | | >>> a = (1,2,3) |
| >>> a[2] = 10 | | >>> a[2] = 10 |
| TypeError: 'tuple' object does not support item assignment | | TypeError: 'tuple' object does not support item assignment |
| | | |
- | リストは「append」で追加できる | + | リストは「append」で追加できます。 |
| >>> a = [1,2,3] | | >>> a = [1,2,3] |
| >>> a.append(2) | | >>> a.append(2) |
| [1, 2, 3, 2] | | [1, 2, 3, 2] |
| | | |
- | タプルは連結ができる。これはもとのタプルを変更しているのではなく、タプルを作り直している。 | + | タプルでは連結ができますが、これはもとのタプルを変更しているのではなく、タプルを作り直しています。 |
| | | |
| >>> a = (1,2) | | >>> a = (1,2) |
| (1, 2, 1) | | (1, 2, 1) |
| | | |
- | 要素一つのタプルは(1,)のようにコンマをつける。 | + | 要素一つのタプルは(1,)のようにコンマをつけます。 |
- | つけないと単なるグループ化と思われて、ただの数字の1となる。 | + | つけないと単なるグループ化と思われて、ただの数字の1となってしまいます。 |
| | | |
| >>> a = (1) | | >>> a = (1) |
| >>> a | | >>> a |
| (1,) | | (1,) |
| + | |
| + | これは関数の引数などにタプルが必要な時、その要素が1つのみだと、うっかり間違って「,」を付けずにエラーを出してしまうことが良くあり、要注意です。 |
| + | |
| + | |
| + | 「リストだけで良いのでは」と思われると思いますが、正直その通りです。ただし、タプルは実行速度がリストよりも少し速いというメリットがあります。他に辞書オブジェクトのキーとしても使えるという特徴があります。他に明示的に変更を禁止したいときにも有用です。 |
| + | |
| + | 実際にはメリットが生かされる場面はちょっと少ないかも知れません。そのわりによく使われるので、他の人のコードなどを読むとき、各種関数や記法を使う時にも必要なので覚えておきましょう。 |
| + | |
| + | 例えば、文字列をフォーマットする%記法ではタプルでないとエラーとなります。 |
| + | |
| + | >>> "%s is a %s" % ("This","test") |
| + | 'This is a test' |
| + | |
| + | |
| + | >>> "%s is a %s" % ["This","test"] |
| + | Traceback (most recent call last): |
| + | File "<stdin>", line 1, in <module> |
| + | TypeError: not enough arguments for format string |