質問記載場所
Windows
Mac
Atom *Atomはテキストエディタです
関数とは
何らかの処理に対して、名前をつけたものです。
関数には、処理だけを行うものもあれば、
結果の値を返すものもあります。
また、値を渡して結果を返すものや
値を渡して処理だけを行う場合もあります。
この渡す値を引数と言います。
print() も組み込み関数の1つです。
「組み込み関数」とは、Pythonプログラムの中で、インポートや定義なしに利用できる関数のことです。対義語は「ユーザ定義関数」です。
[スタート]→[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が返ってきます。
1, デスクトップにelv_python3というディレクトリを作成
【コマンドプロンプト・ターミナル】
cd Desktop
mkdir elv_python3
cd elv_python3
2, テキストエディタで新規ファイルを作成し、
1で作ったディレクトリにself_max.pyで保存
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)
出来上がり!
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 戻り値
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)
まず、このファイルを実行すると
この部分が実行されます
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)
まず、このファイルを実行すると
この部分が実行されます
関数名(引数)で
作成した関数を実行します。
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)
まず、このファイルを実行すると
この部分が実行されます
関数名(引数)で
作成した関数を実行します。
関数を呼び出した時に
わたされた引数は
作成した関数の引数に
わたされます。
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__ が入ります。
デフォルト引数とは、関数を作る際に、
引数に予め固定の値を付与するものです。
関数を呼び出した際に、
デフォルト引数に別の値を指定した場合は、指定した値が適用され、与えていない場合はデフォルトの値が適用されます。
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)
例えば猫には様々な属性と動作があります。
属性
品種
色
年
名前
体重
動作
歩く
寝る
ご飯を食べる
泣く
etc...
例えば人にも様々な属性と動作があります。
属性
名前
年齢
出身地
身長
体重
動作
歩く
寝る
ご飯を食べる
泣く
etc...
これらの基本的な属性や動作を
まとめたものをクラスといいます。
クラスから作られる1つ1つ
猫なら一匹、一匹
人なら一人、一人。。?
を インスタンス と
いいます。
テキストエディタで新規ファイルを作成し、
前半で作ったディレクトリにelv_class.pyで保存
class Human:
first_name = ''
last_name = ''
age = 0
elv_class.py
ターミナルorコマンドプロンプトでimportしてみる
クラス変数とはクラス自体が保持する変数です。
原則、クラス名のすぐ下に宣言された変数がクラス変数となります。
クラス名.変数名 で利用する事ができます。
elv_class.py さっき作ったクラスの下に記載
コマンドプロンプトor ターミナルは一旦exit()、改めてpythonを起動してください。
class Sample:
def __init__(self, value):
self.value = value
オブジェクト固有の変数の事をインスタンス変数と言います。
インスタンスごとに割り当てられるので、変数aのインスタンスを
書き換えても、変数bに入れたインスタンスには影響がありません。
クラスメソッドにある 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を起動してください。
すでにあるクラスの属性や動作を継承する事ができます。
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の結果は
変わりません。
関数
何らかの処理に対して、名前をつけたものです。
デフォルト引数
関数の引数指定時に予めデフォルトの値を設定する事ができます。リストや辞書などをデフォルトにするのは注意が必要
クラス
基本的な属性や動作をまとめたもの
クラスは継承ができる
self
selfはオブジェクト個々の自分自身を表す