Let’s start Python #3 に参加して学んだこと!(関数とクラス)

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

タイトルとURLをコピーしました