初めてのPythonを読んでみる(7)

    • 9.2
      • [], () 内は改行可能。インデントレベルも無視
    • 9.3
      • if で評価した結果戻されるのが、true や false でなく、オペランドになっているオブジェクトである点に注意
>>> 2 or 3, 3 or 2, 2 and 3, 3 and 2
(2, 3, 3, 2)
irb(main):005:0> 2 or 3
=> 2
irb(main):006:0> 3 or 2
=> 3
irb(main):007:0> 2 and 3
=> 3
irb(main):008:0> 3 and 2
=> 2

ruby でも python 同様、オペランドが戻ってくるみたい。

      • 変数に値を代入する時に、or を使うテクニックがある
      • 最初に true を返したオペランドが代入される
>>> a = [] or {} or [1]
>>> a
[1]
  • 10章 whileループとforループ
    • 10.2
      • while ... else ... という表記が可能 (for文でも可能)
      • while の条件式の評価が false だったときに else ブロックが実行される
>>> def echo(x):
...     while x:
...             print x,
...             x = x[1:]
...     else:
...             print 'none.'
... 
>>>
>>> echo('')
none.
>>> echo('foobar')
foobar oobar obar bar ar r none.
while ((c = it.next()) != EOF) { ... }
    • 10.3
      • for 文は、シーケンスオブジェクトであればなんでも適用可能
>>> for (x,y,z) in (1,2,3), (4,5,6), (7,8,9):
...     print x,y,z
... 
1 2 3
4 5 6
7 8 9
      • 各要素に添え字でアクセスしたい場合は range をうまく使う
>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in range(len(L)):
...     L[i] += 5
... 
>>> L
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  • 11章 Pythonのドキュメント

特筆すべき事項なし。

    • 12.3
      • 特定の型を想定してコードを書けば、関数の応用範囲がそれだけ狭まることになる
      • どの型に対応させるか、ではなくどの「インターフェース」に対応させるか、を考えて関数を実装せよ


このサンプルを打ち込んで動かしてみて、インターフェースを考えろといっている意味が理解できた。これはまさに、Java の Interface に対する考え方だね。

>>> def intersect(s1, s2):
...     L = []
...     for i in s1:
...             if i in s2:
...                     L.append(i)
...     return L
... 
>>>
>>> intersect('ocean', 'acean')
['c', 'e', 'a', 'n']
>>> intersect(range(10), range(2,8))
[2, 3, 4, 5, 6, 7]