Beyond The Limit

はじまりは2001年

Python学習メモ6

内包表記

  • リスト内包表記

[expression for item in iterables] コンパクトに構文を作成できる

>>> num_list = []
>>> for num in range(1,6):
...     num_list.append(num)
...     (forの処理の終わりは何も入力せずにEnterを押す)
>>> num_list
[1, 2, 3, 4, 5]
>>>
    上も下も同じ事を実施したということ
>>> num_list = [num for num in range(1,6)]
>>> num_list
[1, 2, 3, 4, 5]
>>>
  • 辞書内包表記

{key_item:value_item for item in iterable}

辞書でも同じようにできる

>>> let_count = {letter:words.count(letter) for letter in words}
>>> let_count
{'l': 1, 't': 2, 's': 1, 'r': 1, 'e': 2}
>>>
  • 集合内包表記

{item for item in iterable}

  • ジェネレータ内包表記

タプル()には内包表記がない、リスト内包表記の[]を()に変えても正常動作するが、これはジェネレータ内包表記となる

ジェネレータは一度しか実行出来ない、一度作ると値をイテレータに渡してしまうので作った物を再利用できない。

>>> num_list = (num for num in range(1,6))  こんな感じでジェネレータ内包表記を作る
>>> for numb in num_list : こんな感じで取り出す
...     print (numb)
...
1
2
3
4
5
>>>     print (numb)
  File "<stdin>", line 1
    print (numb)
    ^
IndentationError: unexpected indent
>>>

関数

  • 最初にdef、次に関数名を各、関数に対する入力引数をかっこに囲んで各、最後にコロンを書く
>>> def com(color):
...     if color == 'red':
...             return 'color is red'
...     elif color == 'blue':
...             return 'color is blue'
...     elif color == 'green':
...             return 'color is greeeeeen'
...     else:
...             return 'other'
...
>>>
>>> com('red')
'color is red'
>>> com('blue')
'color is blue'
>>> com('greeen')
'other'
>>> com('green')
'color is greeeeeen'
>>>
>>> com2 = com('white')
>>> com2
'other'
>>> com3 = com('red')
>>> com3
'color is red'
>>>

位置引数

  • 先頭から順番に対応する位置の仮引数にコピーされる位置引数、関数の引数が何をどの順番にしているのかを覚えておかないといけない
>>> def menu(a,b,c):    位置引数から辞書を作って返す
...     return {'drink':a,'food':b,'etc':c} aの引数はdrinkに対応する、bの引数ははfoodに対応する、cの引数はetcに対応する
...
>>> menu('coffee','cake','cherry')
{'food': 'cake', 'etc': 'cherry', 'drink': 'coffee'}    ただし対応しているが、返ってくる順番はバラバラ
>>>

キーワード引数

  • 位置引数で定義した仮引数の名前を指定して実引数を指定する、順番はばらばらでも構わない
>>> menu(c='beer',b='apple',a='niku')
{'food': 'apple', 'etc': 'beer', 'drink': 'niku'}   drink,food,etcにそれぞれ対応している
>>>
>>> menu('beer',c='apple',b='niku')    位置引数と併用する場合、先に位置引数を指定する必要がある
{'food': 'niku', 'etc': 'apple', 'drink': 'beer'}
>>>
>>> menu('beer','apple',c='niku')  cだけ後で指定した場合
{'food': 'apple', 'etc': 'niku', 'drink': 'beer'}
>>> menu('beer',b='apple','niku')  この場合はエラーになる
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>>

デフォルト引数値の指定

  • 引数が何も指定されなかった場合など、デフォルト値を設定することができる
>>> def menu(a,b,c='prin'): cに何も設定されなかった場合は'prin'を返す
...     return {'tabemono':a,'nomimono':b,'etc':c}  その場合はetc:printとなる
...
>>>
>>> menu('ebi','ikura')    a,bは指定、cは何もなし
{'nomimono': 'ikura', 'etc': 'prin', 'tabemono': 'ebi'} etc:prinが返ってきた
>>>