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

1 比較を連鎖できる。

a = 2

# これを
1 < a and a < 3
=> True

# このように書ける
1 < a < 3
=> True

2 モジュール名はファイル名。

RubyではModuleを定義する構文があり、その中でモジュール名も定義されるが
Pythonではファイル名、例えばhoge.pyであればhogeがモジュール名となる。
これを取り込むには次のように書く。

import hoge

3 モジュールはクラス・関数・変数単位でimportできる。

hogeモジュールからfoo()関数のみ取り込む場合次のように書く

# hoge.py
def foo():
  return 1
# hogeモジュールを使用するスクリプト
from hoge import foo
foo()
=> 1

複数importも可能。

# カンマで区切って複数をimport
from hoge import foo, foo2

# *で全てをimport
from hoge import *

最後のfrom hoge import *とimport hogeでは何が違うのかと言うとfromを使用した場合、hogeは省略して使える。

# import hogeの場合はモジュール名を指定する必要がある。
import hoge
hoge.foo()
=> 1

# from hoge import *の場合はモジュール内の関数等を直接呼び出せる。
from hoge import *
foo()
=> 1

4 モジュールをimportするとRubyのように自クラスのメソッドや変数になるのか?

個人的に一番気になるところなんだが未だわからない。
ただ、動作確認をしている感じだとimportはRubyでいうrequireでありincludeやextendとは違う感じがする。

5 戻り値はreturnを明示する必要がある。

# returnがない場合
def a():
  1


print(a())
=> None

# returnがある場合
def a():
  return 1


print(a())
=> 1

6 with文というものがある。

ある特定のオブジェクトにはwith文を使用することができる。
with文を使用するとオブジェクトが不要になった際にクリーンアップ処理が実行される。
例えばオブジェクトがファイルの場合、RubyのFile.open() {}のように処理終了後ファイルが自動クローズする。

with open('/path/to/file', 'r') as f:
  f.read()

# 処理終了後はファイルが自動クローズされる。

7 range()関数というものがある。

RubyのRangeオブジェクトに近いと言えば近いがPythonでは数値の範囲しか扱えないようだ。

r = range(10)
r
=> range(0, 10)
# 0から9までのループ。
for i in r:
  # 処理

8 例外処理にfinally節とelse節がある。

finally節とはRubyのensure節と同じもの

def a():
  try:
    # 通常処理
  except (IOError, RuntimeError):
    # 例外処理
  else:
    # try節で例外が発生しなかった場合に実行する処理
  finally:
    # 全ての状況で実行される

ちなみに上記例のexcept節の(IOError, RuntimeError)はタプル。関数の()ではない。

9 pass文というものがある。

pass自体何もしない。構文的に文の記述が必要だが何もしたくない場合に使用する。

def a():
  pass

上記関数は何もしない。同じことを表すために下記のように書くとエラーとなる。

def a():

文が必要なところに何も文がないのでエラー

10 クラスの多重継承ができる。

class MyClass(BaseClass1, BaseClass2):
  pass

BaseClass1,BaseClass2が継承元のクラス