質問記載場所

Windows

Mac

Atom   *Atomはテキストエディタです

What is a function?

関数とは

何らかの処理に対して、名前をつけたものです。

 

関数には、処理だけを行うものもあれば、

結果の値を返すものもあります。

 

また、値を渡して結果を返すものや

値を渡して処理だけを行う場合もあります。

この渡す値を引数と言います。

 

print() も組み込み関数の1つです。

組み込み関数」とは、Pythonプログラムの中で、インポートや定義なしに利用できる関数のことです。対義語は「ユーザ定義関数」です

Let's use a function

command prompt or  terminal

[スタート]→[Windowsシステムツール]→[コマンドプロンプト]を選択しましょうWindowsの古いバージョンの場合、[スタート] → [アクセサリ] → [コマンドプロンプト] です。

もしくは、「ウィンドウズキー + R」でファイル名を指定して実行を出して、

cmd と入力してエンター

Windows

[アプリケーション]→[ユーティリティ]→[ターミナル]を選択しましょう。

もしくは、「コマンド + シフト」で検索を出して

terminal と入力してエンター

Mac

引数のない関数

def hello():
    print("Hello")


if __name__ == "__main__":
    hello()

Hello と表示するだけの関数です

関数名() で関数を呼び出す事ができます。

引数を指定する関数

例:max関数

最大の要素、または2つ以上の引数の中で最大のものを返します。

>>>a = [2, 4, 3, 1, 5]
>>>max(a)

5

a という変数に 数字を要素としたリストを代入します。

max関数の引数に、aのリストを入れると、

要素の中で最大となる5が返ってきます。

Let's make it yourself

max関数を作ってみよう

1, デスクトップにelv_python3というディレクトリを作成

【コマンドプロンプト・ターミナル】
cd Desktop
mkdir elv_python3
cd elv_python3

2, テキストエディタで新規ファイルを作成し、

 1で作ったディレクトリにself_max.pyで保存

max関数を作ってみよう

def mymax(numbers):
  # ここに処理を書く
  
  return #ここに戻り値を指定する



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

self_max.py

def mymax(numbers):
  re_no = 0
  
  return #ここに戻り値を指定する



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

self_max.py

まず、比較するための数値を

変数にセットします

def mymax(numbers):
  re_no = 0
  for i in numbers:
  
  return #ここに戻り値を指定する



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

self_max.py

numbersという引数には、

10行目で指定したリストが

11行目のmymax関数で渡されているので、

forb文で1つずつ要素を取り出すことができます。

 

def mymax(numbers):
  re_no = 0
  for i in numbers:
    if i > re_no:
      re_no = i
  
  return #ここに戻り値を指定する



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

self_max.py

取り出した要素とre_noの数値を比較して

取り出した要素の方が、re_noよりも

大きければ、re_noの数値を代入しなおします。

def mymax(numbers):
  re_no = 0
  for i in numbers:
    if i > re_no:
      re_no = i
  
  return  re_no



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

self_max.py

for文が終わると、re_noは一番大きい

数値になっているので、re_noを

戻り値として指定します

def mymax(numbers):
    re_no = 0
    for i in numbers:
        if re_no < i:
            re_no = i

    return re_no



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

出来上がり!

Explanation

def mymax(numbers):
     e_no = 0
    for i in numbers:
    if re_no < i:
        re_no = i
  
    return re_no



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

def  関数名(引数):

  インデントをさげて、処理を記載

        return  戻り値

   

Explanation

def mymax(numbers):
     re_no = 0
    for i in numbers:
        if re_no < i:
            re_no = i
  
    return re_no



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

まず、このファイルを実行すると

この部分が実行されます

Explanation

def mymax(numbers):
     re_no = 0
    for i in numbers:
        if re_no < i:
            re_no = i
  
    return re_no



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

まず、このファイルを実行すると

この部分が実行されます

関数名(引数)で

作成した関数を実行します。

Explanation

def mymax(numbers):
     re_no = 0
    for i in numbers:
        if re_no < i:
            re_no = i
  
    return re_no



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

まず、このファイルを実行すると

この部分が実行されます

関数名(引数)で

作成した関数を実行します。

関数を呼び出した時に

わたされた引数は

作成した関数の引数に

わたされます。

Explanation

def mymax(numbers):
     re_no = 0
    for i in numbers:
        if re_no < i:
            re_no = i
  
    return re_no



if __name__ == "__main__":
    a = [2, 4, 3, 1, 5]
    m_max = mymax(a)
    print(m_max)

まず、このファイルを実行すると

この部分が実行されます

関数名(引数)で

作成した関数を実行します。

戻り値を変数に代入しています。

関数を呼び出した時に

わたされた引数は

作成した関数の引数に

わたされます。

問題

add という関数を作成し、2つの引数を受け取る。

受け取った数値を足した数値を戻り値として受け取り

表示するプログラムを作成してください。

 

def add(a, b):
    return a + b

if __name__ == "__main__":
    x = add(5, 6)
    print(x)

if __name__ == "__main__":

このPythonファイルが「python ファイル名.py というふうに実行されているかどうか」を判定するif文です。

このファイルは import self_max で他のファイルからimport する事ができます。

Pythonには__name__という特殊な変数を、作成したモジュールに自動的に付与するという機能があります。この変数には、Pythonファイルのモジュール名が文字列で入ります。

import した場合、__name__には ファイル名(self_max  が入ります。

pythonファイルをスクリプトとして直接実行した場合は __main__  が入ります。

Default 引数

デフォルト引数とは、関数を作る際に、

引数に予め固定の値を付与するものです。

関数を呼び出した際に、

デフォルト引数に別の値を指定した場合は、指定した値が適用され、与えていない場合はデフォルトの値が適用されます。

def func_default(arg1, arg2="arg2 is default", arg3="arg3 is default"):
    print(arg1)
    print(arg2)
    print(arg3)

デフォルト引数が指定されている場合、関数を呼びだす時に引数にデフォルト引数分の引数を指定しなくてもエラーになりません。

def func_default(arg1, arg2="arg2 is default", arg3="arg3 is default"):
    print(arg1)
    print(arg2)
    print(arg3)

デフォルト引数は、デフォルトの引数を取らない引数より前に指定するとエラーになります。

def func_default(arg2="arg2 is default", arg3="arg3 is default", arg1 ):
    print(arg1)
    print(arg2)
    print(arg3)

リストや辞書などの変更可能なオブジェクトをデフォルト引数にすると、関数を呼びだす度に要素が追加されてしまうので注意が必要です。

def default_list(a=[0, 1, 2], b=3):
    a.append(b)
    print(a)

デフォルト引数には、Noneを指定する事も可能なので、リストや辞書などをデフォル値としたい場合は以下のように利用するのがおすすめ。

def default_list_none(a=None, b=3):
    if a == None:
        a = [0, 1, 2]
    a.append(b)
    print(a)

Break Time

What is Class?

例えば猫には様々な属性と動作があります。

属性

品種

名前

体重

動作

歩く

寝る

ご飯を食べる

泣く

etc...

例えば人にも様々な属性と動作があります。

属性

名前

年齢

出身地

身長

体重

動作

歩く

寝る

ご飯を食べる

泣く

etc...

これらの基本的な属性や動作を

まとめたものをクラスといいます。

 

クラスから作られる1つ1つ

猫なら一匹、一匹

人なら一人、一人。。?

を インスタンス と

いいます。

class変数とinstance変数

class変数

テキストエディタで新規ファイルを作成し、

前半で作ったディレクトリにelv_class.pyで保存

class Human:
    first_name = ''
    last_name = ''
    age = 0

elv_class.py

ターミナルorコマンドプロンプトでimportしてみる

クラス変数とはクラス自体が保持する変数です。

原則、クラス名のすぐ下に宣言された変数がクラス変数となります。

クラス名.変数名 で利用する事ができます。

instance変数

elv_class.py さっき作ったクラスの下に記載

コマンドプロンプトor ターミナルは一旦exit()、改めてpythonを起動してください。

class Sample:
    def __init__(self, value):
        self.value = value

オブジェクト固有の変数の事をインスタンス変数と言います。

インスタンスごとに割り当てられるので、変数aのインスタンスを

書き換えても、変数bに入れたインスタンスには影響がありません。

What is 'self' ?

クラスメソッドにある self  とは何だろう?

class Sample2:
    value = "This is class value"

    def my_self(self):
        return self

    def show_self(self):
        value = "This is method value"
        print(self.value)
        print(value)

self はオブジェクト個々の

自分自身をさします。

my_self メソッドは

自分自身を返す関数になっています。

 

show_selfメソッドは

selfを使い、自分自身の

valueと

メソッド内のvalueを

printしています。

テキストエディタで新規ファイルを作成し、

前半で作ったディレクトリにelv_class2.pyで保存

コマンドプロンプトor ターミナルは一旦exit()、

改めてpythonを起動してください。

Classの継承

すでにあるクラスの属性や動作を継承する事ができます。

elv_class2.pyで作ったSample2を継承してみましょう。

class Sample2:
    value = "This is class value"

    def my_self(self):
        return self

    def show_self(self):
        value = "This is method value"
        print(self.value)
        print(value)


class Sample3(Sample2):
    pass

ここを追記

Sample3自体は pass としか記載がなく

何もしていませんが、Sample2を継承しているので、Sample2mにあるshow_selfメソッドが使えています。

class Sample3(Sample2):

    def origin_method(self):
        print("This is Sample3 original method")

Sample3 に新しいメソッドを追加してみます。

Sample3に追加したorigin_methodはちゃんと動きました。

 

Sample2にはorigin_methodはないため、呼び出そうとしてもエラーとなります。

Sample3 で継承したクラスのメソッドをオーバーライドします。

class Sample3(Sample2):

    def origin_method(self):
        print("This is Sample3 original method")

    def show_self(self):
        value = "This is Sample3's show_self"
        print(self.value)
        print(value)

ここを追記

継承したクラスの中のメソッドと

同じ名前のメソッドを作成すると

上書きされます。

 

print(self.value) は自分自身のクラス変数を

呼び出していますので、変更はありません。

print(value) はshow_selfメソッド内の

value変数を上書きしているため、書き換わります。

 

もちろん、Sample2 のshow_selfの結果は

変わりません。

Summary

関数

何らかの処理に対して、名前をつけたものです。

 

デフォルト引数

関数の引数指定時に予めデフォルトの値を設定する事ができます。リストや辞書などをデフォルトにするのは注意が必要

 

クラス

基本的な属性や動作をまとめたもの

クラスは継承ができる

 

self

selfはオブジェクト個々の自分自身を表す

Thank you!

See you next Time!

Made with Slides.com