やったことを記事にまとめつつ、勉強をしています。
この方法だとやった内容を確認できるからいいですね。(過去記事からコピペ)
今回の関数、クラスのお勉強で基礎編は終了です。
関数で決まった処理を実施しよう
関数 < メインスクリプト
1行、または複数行の命令を作っていき、まとまるといわゆるスクリプト、またはプログラムになります。
しかし、それでは分かりにくい。特に何度も繰り返す同じような処理は簡単にしたいもの。(だって、入力ミスも発生するし…)
そこでよく使用される特定の部分を呼び出せるようにしたのが…関数です。
組み込み関数と自作関数
よく使われる一般的な処理は組み込み関数として実装されています。
例えば…print ( 'Today's weather is good’ )と、実行で使用しているprint( )の部分です。
それに対し、自分作成スクリプトで繰り返し処理をする場合に関数として登録ができるんです。それが自作関数です。※登録方法、作り方は後記
関数の呼び出し方(使い方)
関数名 ( 引数 )
これが関数使用時の基本フォーマット。中には引数不要なものもあるのでその場合はカッコだけになります。
※引数:関数に投入する情報のこと。その情報をもとに、関数から出力される
使用例:input ( )
文法
変数 = input ( テキスト )
input関数はテキスト表示をして、入力された値を変数に入力します。
こちらを実行すると、type a number:と表示されます。
今回は123と入力したので、Out[1]に結果が表示されました。
組み込み関数群のモジュールを組み込もう
今現在は基本的な関数のみ使えるようになっています。しかし、Pythonには便利な関数が膨大に存在しています。その関数を呼び出す方法が…import命令です。
import命令
文法
①import モジュール
①import モジュール import 関数など
①ではモジュール全体で複数の関数を取り込みます。
その関数を使用する際には モジュール.関数() で実施します。
それに対し、②は関数自体を取り込むので、使用時は 関数()で済む利点があります。
fsum関数
mathモジュールにはfsumという、リストの合計値を計算する関数があります。
文法は関数使用時と変わらず、fsum(因数)になります。
上記の通り、form、importで関数を呼び出し使用しています。
関数の作り方
文法
def 関数名 ( 因数 ):
…実行する処理…
returnという単語が出てきました。
return 値、という文法で戻り値を指定します。
今回の例だと、戻り値は偶数、奇数のどちらかになっています。
スクリプトを作って、実行しよう!
クラスとは?
関数よりも大きい処理を取り決めることをクラスと呼びます。
関数は変数を入力し、決まった処理をして、引数を返していました。
しかし、クラスは関数を束ねることができるため、複数の引数を返すことが可能になります。
文法
class クラス名
…クラスの内容…
メソッド?インスタンス?
クラス内の関数の処理をメソッド、クラス内で使用する変数群のことをインスタンスといいます。図にするとこんな感じ(Tomaの理解度での話ですよ)
クラスを使用するためには
ファイルを作成し、保存する必要があります。
ファイルはスクリプトの形になり○○.pyというファイル名で保存します。
使用例
今回はDeskTopにpython_sample.pyといるファイル名で保存します。
内容は下記
class member:
name = 'no name'
age = 0
mail = 'no address'
def print(self)
print(self.name + '(' + str(self.age) + ' old. ' + self.mail + ')')
taro = Member()
taro.name = 'Taro-Yamada'
taro.age = 39
taro.mail = 'taro@yamada.kun'
taro.print()
selfって何でしょう?
説明が抜けてました。selfはクラスの中で使う変数の全体を表しています。
そのためクラス内で変数を使用する場合はself.~とします。
それゆえにself.name、self.age、self.adressという表記をしているのです。
さて、クラスを含むスクリプトの実行
まず、Anacondaからターミナルを起動します。
cdコマンドを使って、Desktopへ移動します。
そして、pythonコマンドで先ほどのスクリプトを実行します。
初期化メソッド?
変数の割り当て方法の宣言といったほうが分かり易いかもしれません。
先ほど作ったpython_sample.pyでは、1行で一つの変数に値を割り当てていました。
しかし、初期化メソッド:initを使うことで割り当てが簡単になります。
文法
def __init__(self):
…処理…
今回は下記の様に追加しpython_sample2.pyと変更します。
class Member:
name = 'no name'
age = 0
mail = 'no address'
def __init__(self, name, age, mail):
self.name = name
self.age = age
self.mail = mail
def print(self):
print(self.name + '(' + str(self.age) + ' old. ' + self.mail + ')')
taro = Member('Taro-Yamada', 39, 'taro@yamada.kun')
taro.print()
hanako = Member('Hanako-Tanaka', 28, 'hanako@flower.san')
hanako.print()
実行結果
名前付き引数で使用する
引数設定は名前で設定することも可能です。そのやり方が下記。
class Member:
name = 'no name'
age = 0
mail = 'no address'
def __init__(self, name='noname', age=0, mail='no address'):
self.name = name
self.age = age
self.mail = mail
def print(self):
print(self.name + '(' + str(self.age) + ' old. ' + self.mail + ')')
taro = Member('Taro-Yamada', 39, 'taro@yamada.kun')
taro.print()
hanako = Member(name='Hanako-Tanaka', mail='hanako@flower')
hanako.print()
who = Member()
who.print()
実行結果
継承システムとは?
すでにあるクラスに用意されている変数、メソッドを全て受け継いで新しいクラスを靴ることを継承といいます。
文法
class クラス名 ( 継承するクラス ):
…クラスの内容…
こちらがその例
class Member:
name = 'no name'
age = 0
mail = 'no address'
def __init__(self, name='noname', age=0, mail='no address'):
self.name = name
self.age = age
self.mail = mail
def print(self):
print(self.name + '(' + str(self.age) + ' old. ' + self.mail + ')')
class Employee(Member):
company = 'unemployed'
def __init__(self, company='', name='noname', age=0, mail='no address'):
self.company = company
super().__init__(name, age, mail)
def print(self):
print(self.name + '(' + str(self.age) + ' old. ' + self.mail + ' [' + self.company + '])')
taro = Member('Taro-Yamada', 39, 'taro@yamada')
taro.print()
hanako = Employee(name='Hanako-Tanaka', company='shuwa Sysytem')
hanako.print()
実行結果
次回からDjangoのお勉強に戻ります。
【更新履歴】
2022/12/09 新規作成