Python勉強会~その1~【関数化】

python勉強会 Python

Pythonでの関数化について説明していきます。

関数化の利点として、コードの一般化や再利用を比較的簡単に行えるという点があります。

例えば、エラーが表示されたとき、一箇所のコードを修正しても、同様のコードを他の箇所で記載している場合に、その箇所での修正忘れがあったりします。
この部分を関数化をしておくことで関数内の一部分を修正するだけでコード全体の修正が可能となります。

関数化はPython以外の如何なる言語でも多用するものなので覚えておきましょう。

関数の定義

関数の宣言は以下のようにする。

def hoge(x, y):
     hogehoge...

hogeが関数名、x,yが引数、hogehogeが関数の内容である。
与えられた二つの数値の大きい方を返す関数は以下のようになる。

def maxVal(x, y):
     if x > y:
         return x
     else:
         return y

練習問題として、

2つの文字列を引数とし、このどちらか一方の文字列が他方の文字列内に含まれる場合、Trueを返し、それ以外の場合、Falseを返す関数を書け。

という問題があるのでそれについての私の解答はこちらである。

def isIn(str1, str2):
    if str1 in str2:    # str1がstr2に含まれている場合
        return True
    elif str2 in str1:  # str2がstr1に含まれている場合
        return True
    else:
        return False

キーワード引数とデフォルト値

キーワード引数を使用することで仮引数と実引数を紐付けすることができる。
例えば、このような関数があったとする。

def printName(firstName, lastName, reverse):
    if reverse:
        print(lastName + ", " + firstName)
    else:
        print(firstName, lastName)

この関数を呼び出すときに以下のように仮引数=実引数と書いても等価な呼び出しとなる。

printName("Olga", "Puchmajerova", reverse = True)

つまり、reverseをTrueとして呼び出しているのと等価となる。

1つ注意点として、キーワード引数の後にキーワード引数でないものは記入できない
以下の呼び出しはエラーとなってしまう。

printName("Olga", lastName = "Puchmajerova", True)

これは注意すべき事項である。

次にデフォルト値について説明する。
デフォルト値は関数を定義するときに規定値を呼び出すことができる。
先ほどの関数を以下のように変更する(reverse = True)。

def printName(firstName, lastName, reverse = False):
    if reverse:
        print(lastName + ", " + firstName)
    else:
        print(firstName, lastName)

こうすることで呼び出し時に引数を省略することができる。

printName("Olga", "Puchmajerova")

スコープ

スコープというのは平たく言えば、ある変数がどこまでその値を保持しているかということを言う。
以下の例を見てみよう。

def f(x):
    y = 1
    x = x + y
    print("x = ", x)
    return x

x = 3
y = 2
z = f(x)
print("z = ", z)
print("x = ", x)
print("y = ", y)

これを実行すると、x = 4, z = 4, x = 3, y = 2という結果が表示される。

x = 4は関数f(x)内でのprint関数によるものである。
z = 4は関数f(x)を呼び出した後の返り値が4によるものである。
x = 3とy = 2は定義した値そのものである。

関数f(x)内部とその外で同じ変数x,yを使用しているが、関数内部でのx,yは関数内部でしか値を保持しないようになっている。
なので、関数の外でのx,yは定義した値のまま表示される。
スコープに関しては非常に複雑なのでゆっくりと理解していきたい。

追記

この内容は「Python言語によるプログラミングイントロダクション 第2版 データサイエンスとアプリケーション」に沿って行なっております。

興味がある方は是非購入してみてください。

コメント

%d人のブロガーが「いいね」をつけました。
タイトルとURLをコピーしました