今週 Let’s start Python #3 に参加してきました!今回の講座内容は関数とクラスです。
関数
関数:処理に名前を付けたもの
method:クラス内で定義された関数
methodと関数が何となく同じもの?と思ってたので、違いを明確に理解できました!
そしていきなり問題が出題!
問題:max関数を作成する
# self.max.py def mymax(numbers): # ここに処理を書く return #ここに戻り値を指定する if __name__ == "__main__": # 直接実行された場合のみ実行される(importされた場合は実行されない) a = [2, 4, 3, 1, 5] m_max = mymax(a) print(m_max)
※ おまじないとして理解していた __name__ == “__main__” についても上記のように理解できました!
私の回答
for文とif文を使えばできますよとのことでしたが、急に問題が出されて時間も制限されるとパニック!笑
とりあえずsortしてリストの先頭を取得する方向で、時間内になんとか回答
# self.max.py def mymax(numbers): a.sort(reverse=True) # リストをsort return a[0] # 最初の配列を取り出す if __name__ == "__main__": a = [2, 4, 3, 1, 5] m_max = mymax(a) print(m_max) # 実行結果 5
回答
def mymax(numbers): re_no = 0 for i in numbers: if re_no < i: # リストから取り出した値が大きければ re_no = i # re_no変数に代入 return re_no if __name__ == "__main__": a = [2, 4, 3, 1, 5] m_max = mymax(a) print(m_max)
コードを読むとそうだよねーと理解できるのですが、意外とパッと書けないものです。。こういった練習の積み重ねが必要なんでしょうね。
デフォルト引数
デフォルト引数とは、関数を作る際に、引数に予め固定の値を付与するものです。
>>> def func_default(arg1, arg2="2", arg3="3"): ... print(arg1) ... print(arg2) ... print(arg3) ... >>> >>> func_default("aaa", "bbb") aaa bbb 3 # 引数が代入されていないので、デフォルト引数の値が出力される
クラス
クラスとは、料理のレシピのような基本的な属性や動作を纏めたもの。カレーの場合、食材(属性)に米と肉と野菜とカレーのルーが必要で、ご飯を炊いて、食材を炒めて煮るといった動作が必要になります。
このクラスを元に、食材を鶏肉にしたり、野菜のみにして作られたもの(チキンカレーやベジカレー)をインスタンスといいます。
$ vi elv_class.py class Human: first_name = '' # クラス変数 last_name = '' age = 0 class Sample: def __init__(self, value): self.value = value $ python >>> from elv_class import Human >>> Human.first_name = 'taro' # クラス変数は、「クラス名.変数名」で利用できる >>> Human.last_name = 'yamada' >>> Human.age = 30 >>> print(Human.first_name, Human.last_name, Human.age) taro yamada 30 >>> from elv_class import * >>> a = Sample('Hello') # インスタンス変数 >>> b = Sample('Bye') >>> a.value 'Hello' >>> b.value 'Bye' >>> a.value = 'good morning' >>> a.value 'good morning'
クラスメソッドにあるself
$ vi elv_class2.py class Sample2: value = "This is class value" def my(self): # selfはオブジェクト個々の自分自身を指す return self def show(self): # selfを使って自分自身(クラス)のvalueとメソッド内のvalueをprint value = "This is method value" print(self.value) # クラスのvalue print(value) # メソッド内のvalue class Sample3(Sample2): # クラスの継承 def origin_method(self): print("This is Sample3 original method") def show_self(self): # メソッドのオーバーライド value = "This is Smaple3's show" print(self.value) print(value) $ python >>> from elv_class2 import * >>> a = Sample2() >>> b = a.my() # a自身をbに代入 >>> a is b True >>> print(b) <elv_class2.Sample2 object at 0x7facf2dd4b00> >>> a.show() This is class value # クラスのvalueが出力 This is method value # メソッド内のvalueが出力 >>> a = Sample3() >>> a.show() This is class value This is Smaple3's show # メソッドがオーバーライドされている
主催者の方の資料:python_elv3
※ 上下左右ボタンでページが切り替わります。