【ぱいそん】はじめました。忘備録⑥メソッド(関数)について【Python】
まだまだ続く以下の動画でのPython学習 !
そろそろ、頭から湯気が……。
処理のまとまりメソッド(関数)について
def study(lang): print(f"{lang}入門") print(f"{lang}講座") study("Python") study("PHP")
メソッドとは、処理のまとまりの事を言い、呼び出されるまでは実行されません。
上のコードでは、defと書かれているところから3行がメソッドになります。
defの後ろのstudyは、メソッドの名前になります。
メソッド名は自由に設定できます。
()の中のlangは引数となり、メソッドを呼び出す時にメソッドの外から代入することのできる変数です。
このコードを実行すると、最初に5行目のstudy("Python")が実行されます。
つまり、メソッドのstudyを呼び出して、引数langに文字列”Python”を代入していることになります。
そのため、print(f"{lang}入門")のlangはPythonとなり、Python入門が出力されます。
また、3行目も同様に、print(f"{lang}講座")のlangはPythonなので、Python講座が出力されます。
次に、6行目が実行され、langにPHPが代入されるため、5行目の処理と同様に、PHP入門とPHP講座が出力されます。
メソッドの引数について
def ask(): print("質問はコメント欄へ") def say_age(me,age): print(f"{me}は{age}です") ask() say_age("私",40)
1行目のaskの()の中には何も書かれていません。
これは引数を受け取る必要がないため、引数なしになっています。
次に4行目のsay_ageの場合、引数が2つになっています。
複数の引数を受け取る場合、カンマで区切ることで、複数の引数を持たせることができます。
呼び出し側も同様にカンマで区切ることで、複数の引数を渡すことができます。
このコードの場合、say_ageの引数meに私が、ageに40が渡されています。
なので、say_ageを実行すると、私は40ですと出力されます。
引数のデフォルト値
def say_age(me="私",age=30): print(f"{me}は{age}です") say_age() say_age("僕") say_age("君",40)
デフォルト値とは、何も指定がない場合に採用される値の事です。
このコードの場合、4行目の引数なしのsay_ageを実行すると、meには私、ageには30と言うデフォルト値が代入され、私は30ですと出力されます。
次に5行目の引数を一つだけ渡した場合は、meには渡された引数の僕が、ageには、デフォルト値の30が渡され、僕は30ですと出力されます。
returnと戻り値
def price(age): if age>=20: return "大人料金" else: return res=price(20) print(res)
returnの役割
1.その場でメソッドを終了
2.呼び出し元へ戻り値を返す
このコードを実行すると、まずres=price(20)が実行されます。
引数ageに20が代入され、if文のageが20>=20でTrueのため、
3行目の処理が実行されます。
この時、returnの後ろの大人料金を戻り値として、返すので、res=”大人料金”となり、
それを出力するため、大人料金と表示されます。
何もないことを表す特殊な値None(null)
def price(): return res=price() print(res)
returnの戻り値が何もない場合は、実行すると、Noneが返ってきます。
Noneは、何もないことを表す特殊な値で、他のプログラミング言語ではnullとなります。
別ファイルのPythonプログラム=モジュール
#このプログラムは sample.py です #別ファイル、file1.py を読み込みます import file1 #モジュール名. で呼び出します file1.hello()
#このファイルは file1.py です def hello(): print("hello")
Pythonでは別のファイルに書かれたプログラムを呼び出すこともできます。
上のコードの場合、まずsample.py上で、file1.pyを読み込みます。
import file1
と書き、file1.pyの.pyの部分は省略します。
このimport宣言により、別ファイルを読み込むことができます。
Pythonでは別ファイルのPythonプログラムの事をモジュールと呼びます。
次に、別ファイルのメソッドを呼び出します。
file1.hello()
モジュールのメソッドを呼び出す時は、ファイル名.メソッド名で呼び出します。
Pythonの便利モジュール=標準ライブラリ(標準モジュール)
Pythonにはいろいろ便利なモジュールがすでに準備されています。
それを使えば、1からプログラムを作らなくても、そのモジュールを呼び出すことで簡単にプログラムを作ることができます。
#標準モジュールのimport #日付を便利に操作できる import datetime #便利に計算してくれる import math #現在時刻を表示する print(datetime.datetime.now())
上のコードは、標準モジュールのdatetimeを使って、現在時刻を表示するプログラムです。
実行環境によっては、現在の時間と異なる時間が表示されるかもしれません。
webの場合、どこにサーバーがあるかで違うようです。
上のコードを改造してUTC(協定世界時)を取るようにしてみました
#標準モジュールのimport #日付を便利に操作できる import datetime #現在時刻を表示する print(datetime.datetime.now(datetime.timezone.utc))
続いて、世界標準時と時差を用いて、日本の時間を表示してみました。
#標準モジュールのimport #日付を便利に操作できる import datetime # JSTとUTCの差分 DIFF_JST_FROM_UTC = 9 now = datetime.datetime.utcnow() + datetime.timedelta(hours=DIFF_JST_FROM_UTC) print(now)
他にも各国のタイムゾーンを扱うpytzなどを使って実装できるようです。
引数や戻り値の方を指定するType hint
def say_age(me:str,age:int)->str: return f"{me}は{age}です" res=say_age("私",20) print(res)
このメソッドでは、引数meは文字を、ageは数字を受け取ることを想定しているため、meはstr型、ageはint型の指定がされています。
戻り値の型の宣言は、->を使い、その後に何型かを書きます。
今回の場合は、str型なので、strとなっています。
このように引数や戻り値の値を設定することをタイプヒントと言います。
他のプログラミング言語では、このタイプヒントで指定した型以外を使うとエラーが返されますが、Pythonでは現在、エラーは返されません。
型が違うことを確認する場合は、mypyというライブラリを使用します。
標準ライブラリではないので、インストールが必要になります。
型の変換=キャスト
型の変換とは、int型のものをstr型に変えたり、str型のものをint型に変換するようなことを言います。
数字を文字列に変換する場合
foo=1 foo=str(foo)
のように、str()を使います。
文字列を数値に変換する場合
foo="1" foo=int(foo)
のようにint()を使います。
a=1 b=str(a) c="1" d=int(c)
のように設定した場合、a+bやc+dはエラーになり、a+dは足し算されて2を、b+cは文字列なので、11が返されます。
型の比較
型を調べる場合はtype()で調べます。
type(1)
の場合はintが
type("1")
の場合はstrが返ってきます
型の比較はis(==ではない)で行います。
type(1) is int
の場合はTrueが
type(1) is None
の場合はFalesが返ってきます。
以下のように書くと出力できます。
print(type(1)) print(type("1")) print(type(1) is int) print(type(1) is None)
出力結果は、それぞれ
<class 'int'>
<class 'str'>
True
False
になります。