新たな気づき(Chapter 10-2、10-3)
- 関数の使用時に引数を明示的に書かない場合は定義の順序どおりに書く必要があるが、明示する限りにおいてはこの限りではない(キーワード引数という)。関数定義で以下のようにデフォルトの値を置いておくことも可能。
def calc(v=100,p=500): revenue = v*p return revenue print(calc()) #50000 print(calc(200,500)) #100000 print(calc(p=100,v=10)) #1000 print(calc(p=1000)) #100000
- def function(*args)の*argsは引数が複数存在し得るが何個かわからない場合に使う。argsでなくても*varsとかでも別に構わない。*がついてると引数の存在が不特定多数と意味する。定義の最中は*argsではなく*をとってargsになる。
def nozomi(start, end, *vias): stop_list = [start] #起点だけのリストを作成 stop_list += list(vias) #経由地をリストに追加。ここは*viasではなくvias stop_list += [end] #終点をリストに追加 return stop_list print(nozomi("Tokyo", "Shin-Osaka", "Shin-Yokohama","Nagoya", "Kyoto")) # ['Tokyo', 'Shin-Yokohama', 'Nagoya', 'Kyoto', 'Shin-Osaka']
- def function(**kwargs)の**kwargsは引数が辞書となる場合に使う。これもkwargsでなくても**dictとかでもかまわない。**がついてると引数が辞書であることを意味する。
def toyoko(length, stations, **dict): line_data = {"路線長":length, "駅数":stations} line_data.update(dict) print(line_data) toyoko(24.2, 21, 起点="渋谷", 終点="横浜") {'路線長': 24.2, '駅数': 21, '起点': '渋谷', '終点': '横浜'}
- 自分で作成した関数やクラスを別のファイルに保存してある場合(これをモジュールと呼ぶ)、import filenameで読み込める。filename.pyのように拡張子を付ける必要はない。読み込んだ上でfilename.function()で関数を呼び出す。
- モジュールを書き換えた場合それが反映されない場合は以下のコマンドで再読込がなされる。
>>> import importlib >>> importlib.reload(filename)
from directory_name import module_name module_name.function()
以下のように特定の関数だけを呼び出すことも可能で、この場合いちいちモジュール名を関数の前に追記する必要がない。
from directory_name.module_name import function function()