もっと関数について①
以前の記事で、関数とはどのようなものかを解説しました。今回の記事では、その関数についてもっと詳しく取り扱っていきましょう。
関数の復習をちょこっとしましょう。
def 関数名(引数1, 引数2, ....):
処理
return 戻り値
戻り値とは、その名の通り返ってくる値のことです。
今回は、さらに奥まで踏み込んでみましょう。
関数の引数にはデフォルト値を指定することができます。デフォルト値とは、初期値という意味で関数を呼び出す際にその引数が指定されなかったら、デフォルト値が使用されます。構文は以下のようになります。
def 関数名(引数1, 引数2, 引数3 = デフォルト値, ....):
処理
return 戻り値
実際に具体例を見ていきましょう。
def multiple(x, y = 100):
return x * y
print(multiple(5))
print(multiple(5, 4))
実行結果
500
20
この例では、もし引数yが指定されなければデフォルト値として100が使用され、引数yが指定された場合ではデフォルト値は使用されません。
また、関数の呼び出し時において引数の名前を指定することができます。以下に具体例を見ていきましょう。
def a(x, y):
return x/y
print(a(40, 4)) #通常の呼び出し
print(a(y=4, x=40)) #引数を指定して呼び出し
実行結果
10.0
10.0
このように、引数の名前が分かっている場合には引数を指定して呼び出すことができます。基本的には関数の引数の順番には意味があり、呼び出し時の引数の順番がそのまま定義時の引数の順番になりますが、引数を指定して呼び出すと順番がばらばらでも大丈夫になります。
今回の記事はこれで終わりです。次回も関数について詳しく取り扱っていきます。お疲れさまでした。
無名関数について
今回は無名関数lamdaについて取り扱っていきます。
結構前の記事で関数について扱いましたが、その関数の亜種みたいな感じです。
皆さんは関数について覚えていますか?
def 関数名(引数):
関数の処理
という構文のやつですね。そして、関数を読み出すときは 関数名(引数) と書くんでしたね。
では、無名関数はどのように使うのでしょうか?名前の通り、無名関数は名前のない関数です。通常の関数と同じようには使うことができません。そのため、無名関数を使うためには変数に代入する必要があります。また、無名関数は通常の関数のように宣言する必要がありません。次の構文で書きます。
v = lamda 引数1, 引数2, ... : 式
実際に具体例を見ていきましょう。引数として与えられたものを足し合わせたものを返す関数を作ってみましょう。
a = lambda x, y :x + y
print(a(8, 9))
print(a(4, 5))
実行結果
17
9
なんとなくつかめましたか?上の例はlamda関数を用いて、x,y を引数にもち、x+yを戻り値としてもつ関数aを作ったことになります。通常の関数を使うと、以下のようになります。
def a(x, y):
returm x+y
無名関数を用いたほうが少し短くなっていることが分かるでしょうか。無名関数を用いると、関数を定義する必要がない分、少し楽になっていることが分かります。
以上で今回の記事は終わりです。お疲れさまでした。
文字列の操作②
今回の記事は、文字列の操作について取り扱っていきます。具体的に見ていきましょう。
前回の記事で文字列のメソッドであるsplitメソッドを取り扱いました。
今回は、同じく文字列のメソッドであるjoinメソッドを見ていきましょう。joinメソッドは以下の構文で使います。
'連結文字'.join(リスト)
joinメソッドは、リストなどを引数にとり、戻り値としてリストを連結文字で連結した文字列を返します。具体例を見ていきましょう。
a = ['banana', 'apppl', 'orange']
b=' '.join(a)
print(a)
print(b)
実行結果
['banana', 'apppl', 'orange']
banana apppl orange
以上のように、joinメソッドを用いて文字列のリストを空白で結合した文字列bを作りました。
次は、文字列の置換に用いるreplaceメソッドを見ていきましょう。replaceメソッドは以下の構文でつかいます。
文字列.replace(old, new, count)
replaceメソッドは文字列のoldで指定した部分をnewにcount回変化させます。countはデフォルトでは1になっています。具体例を見ていきましょう。
a = 'He is happy'
b = a.replace('He', 'She')
print(a)
print(b)
実行結果
He is happy
She is happy
また、lowerメソッドは文字列を小文字に置換するメソッドであり、upperメソッドは文字列を大文字に置換するメソッドです。
文字列にはさまざまなメソッドがあり、それらを利用することで文字列を好きなように操作することができます。文字列を操作できると、作れるプログラムの幅がぐっと広がるので、習熟しておきましょう。
以上で今回の記事は終わりです。お疲れさまでした。
文字列の操作①
今回の記事では、文字列の操作について取り扱っていきます。
文字列は、リスト同様インデックスが存在します。また、スライスも可能です。具体例を見ていきましょう。
a = 'apple'
print(a[0])
print(a[1])
print(a[0:2])
print(a[:4])
実行結果
a
p
ap
appl
また。文字列はsplitメソッドを用いて分割することができます。
splitメソッドは、文字列を指定した文字で分割して、文字列のリストを作る文字列のメソッドです。区切り文字を引数にとり、区切り文字で分割されたリストを戻り値にとります。以下のような構文をとります。
文字列.split(区切り文字)
実際に具体例を見ていきましょう。
a = 'I am happy'
b = a.split()
print(a)
print(b)
実行結果
I am happy
['I', 'am', 'happy']
以上のように、区切り文字で分割されたリストを戻り値にとりますが、文字列自身には変化がないことが分かりますね。
ここまでで今回の記事は終わりです。次回は文字列のさまざまなリストについて取り扱っていきます。お疲れさまでした。
リストについて③
リストには様々なメソッドがあります。
今回の記事では、そのさまざまなメソッドについてみていきましょう。
メソッドの使い方は覚えていますか?
オブジェクト.メソッド名()
という風に使うんでしたね。
リストに対するメソッドを以下にまとめます。
append(x):値xを末尾に追加
extend(L):異なるリストLを末尾に追加する。
insert(i, x):インデックスiの位置に値xを挿入する。
remove(x):リスト中にあるxを削除する(先頭から数えて一つのみ)
pop():リストの末尾にある要素を取り出し、リストから削除する。
clear():リストの全要素を削除
index(x):リストから値xを探してそのインデックスを返す
count(x):リスト中にxが何回出現するか回数を返す。
sort(key, reverse):リストを昇順に並べ替える。
このように大量のメソッドが存在します。少しずつ覚えていきましょう。
以上で今回の記事は終わりです。お疲れさまでした。
リストについて②
今回の記事もリストについて取り扱っていきます。
リストには、変数にオブジェクトが保存されているのではなく、変数にはオブジェクトの参照が保存されています。なんだかよく分からないですよね。もうちょっと詳しく見ていきましょう。
例えば、次のようなリストを作ります。
a = ['apple', 'lemon', 'orange']
この時、変数aにはオブジェクトが保存されているわけではありません。しかし、printなどの関数を使うと、オブジェクトにアクセスすることができます。なぜなら、変数aにはオブジェクト['apple', 'lemon', 'orange']の参照(場所)が保存されているからです。
ここまでの説明で、変数に実際にオブジェクトが保存されていても、参照が保存されていても、関係ないではないかと思うかもしれません。しかし、ここの部分をしっかりと押さえていないと、不具合が生じることがあります。なぜなら、
a = ['apple', 'lemon', 'orange']
b = a
という風に書いた時には、bにもオブジェクトの参照が代入され、また
a[0] = 'banana'
という風に書いた場合にはオブジェクトそのものに代入するからです。
どういう不具合が起きるかを、実際に見ていきましょう。
a = ['apple', 'lemon', 'orange']
b = a
a[0] = 'banana'
print(a)
print(b)
実行結果
['banana', 'lemon', 'orange']
['banana', 'lemon', 'orange']
どういうことかわかりましたか?もしもリストの変数に参照ではなくオブジェクトそのものが代入されているのなら、b = aとしたときにはaのオブジェクトがbにコピーされ、その時点でaとbは関係がなくなります。しかし、実際には参照がコピーされるため、aもbも同じオブジェクトを参照していることになっています。そのため
a[0] = 'banana'のように、オブジェクトを直接書き換えると、同じオブジェクトを参照しているbにも影響がでてしまうのです。
今回の記事はこれで終わりです。お疲れさまでした。
リストについて①
今回はリストについて取り扱っていきます。
リストについて覚えていますか?
ちょっと作り方を復習していきましょう。
a = [1, 2, 3, 4, 5]
このように、数字や文字列をで囲めばリストの完成です。リストはイテラブルなオブジェクトのため、for文で中身を取り出すこともできます。
a = [1, 2, 3, 4, 5]
for x in a:
print(x)
実行結果
1
2
3
4
5
リストは、数字以外にも文字列を入れることもできます。
今回は、インデックスとリストのスライスについて説明していきます。
リストには、文字列同様インデックス(索引)が定義されています。
リストは順番が記憶され、先頭から0,1,2,3......という風にインデックスが割り振られています。実際に例を見ていきましょう。
a = ['apple', 'lemon', 'orange']
print(a[0])
print(a[2])
実行結果
apple
orange
このように、リストにはインデックスが割り振られており、を使ってアクセスすることができます。また、文字列と同様にスライスも存在します。
a = ['apple', 'lemon', 'orange']
print(a[0: 1])
print(a[:2])
print(a[::-1])
実行結果
['apple']
['apple', 'lemon']
['orange', 'lemon', 'apple']
スライスについて解説します。
スライスは
[開始点:終点:取り出し方]
のように指定します。開始点のインデックスから、終点のインデックスの一つ前までの値を取り出します。取り出し方は省略可能で、デフォルトでは1です。取り出し方に2を指定すると、一つ飛ばしで取り出し、取り出し方に3を指定すると二つ飛ばしで取り出し、取り出し方に-1を入れると逆順に取り出します。また、開始点も省略可能で、デフォルトでは0になっています。また、終点を省略すると、最後まで取り出すことができます。このようなスライスは、文字列にも用いることができます。
また、スライスを用いるとインプレイス(その場)で値が変化するのではなく、スライスされたものが戻り値として返されます。そのため、次のようなことが起こります。
a = ['apple', 'lemon', 'orange']
b = a[:2]
a[:2]
print(a)
print(b)
実行結果
['apple', 'lemon', 'orange']
['apple', 'lemon']
つまり、a[:2]という操作を行ったとしても、戻り値が変数に代入されていないため、リストaには変化がありません。また、b = a[:2]という風に操作を行うと、リストaにスライスを行った戻り値がbに代入されます。
このように、スライスはあくまで戻り値を返すものであり、リスト自体には変化を加えません。リスト自体に変化を加えるなら、以下のようにします。
a = ['apple', 'lemon', 'orange']
a = a[::-1]
print(a)
実行結果
['orange', 'lemon', 'apple']
以上で今回の記事は終わりです。お疲れさまでした。