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


