RubyプログラマがPythonを学び始めて知ったこと10選 ②

1 case文がない。

ifとelifがその代わりを果たす。Rubyの場合正確にはcase式なんだけどね。

if x == 0:
  # 処理
elif x == 1:
  # 処理

当たり前と言えば当たり前

2 キーワード引数というものがある。

キーワード引数とは関数定義時の仮引数名を使って引数を渡せる仕組みのこと。

# こういう関数があったとして
def my_func(arg1 = 1, arg2 = "yes"):
  # 処理

# このように引数を渡せる。 
my_func(arg2 = "no")

3 仮引数の最後が**引数名の場合、その引数はディクショナリを受け取る。

ディクショナリとはRubyでいうハッシュ。このディクショナリには仮引数に対応するキーワードを除いた全てのキーワード引数が入る。つまりこの形にすれば仮引数にないキーワードが使える。

def my_func(arg, **dic):
  return dic

my_func(arg=0, hoge=1, foo=2)
=> {'hoge' : 1, 'foo' : 2}

4 関数のコメントを手軽に確認できる。

def my_func()
  """コメント"""

# このようにして確認ができる
my_func.__doc__
=> 'コメント'

5 リスト内包というものがある。

Rubyで以下のように書くものが

[1, 2, 3].map {|member| member * 2}

Pythonではこのように書ける

[member * 2 for member in [1, 2, 3]]

6 リストの足し算はできるが引き算はできない。

リストとはRubyでいう配列のようなもの。

# これは可
[1] + [2]
=> [1, 2]

# これは不可
[1, 2] - [1]
=> エラー

7 タプルというデータ型がある。

タプルとはRubyの配列のようなものだが、タプルは個々のアイテムを変更することができない。

a = 1, 2, 3
=> (1, 2, 3) # これがタプル
# 配列のようにfor文にかけたり各アイテムを参照することが可能。
for i in a:
  print(i)

=>
1
2
3

a[0]
=> 1

# 変更はできない
a[0] = 5
=> エラー

ちなみに空のタプルとアイテムが一つだけのタプルは次のように書く

# 空のタプル
a = ()

# アイテムが一つだけのタプル
b = 1,

最後のカンマが気になるけど、カンマなかったら単なる1の代入だもんな。
あ、それとRubyにもTuple型あった。

8 JavaScriptのようにアイテムがコレクションに含まれるか手軽に調べられる。

a = [1, 2, 3]
1 in a
=> True
4 in a
=> False

9 sort()は破壊的。

a = [2, 4, 1, 3]
a.sort()
a
=> [1, 2, 3, 4]

破壊を回避するにはsorted()を使う

a = [1, 3, 2]
b = sorted(a)
a
=> [1, 3, 2]
b
=> [1, 2, 3]

10 集合型であればコレクションの引き算ができる。

先にリストの引き算ができないと書いたがこれでカバーできなくはない。

a = set([1, 2, 3]) # set()で集合型に変換
b = set([1, 3]) # set()で集合型に変換
a - b
=> {2} 

ちょっと面倒と言えば面倒。