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が継承元のクラス