今週 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
※ 上下左右ボタンでページが切り替わります。


