Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python・関数】~注意点~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。今日もまたまた、Pythonに関する記事を書いていきます!

今日は「関数の注意点」ついて詳細に解説していこうと思います!

 

【目次】

 

関数の注意点

可変長引数

昨日の記事でも紹介されましたが、単純に値のみを引数として渡す場合、可変長引数は*で示します。

「**変数」のように、アスタリスク2つを引数の変数の前につければいいのです。これで、キーワード引数を必要なだけ渡すことができます。キーワード付きなので、仮引数に渡されるのはタプルではなく、辞書です。キーワードと値が、そのまま辞書のキーワードと値としてまとめられるのです。

 

def judge(**arg):
    pass_list = []
    for key in arg:
        print(f'{key}: {arg[key]} points')
        if arg[key] >= 75:
            pass_list.append(key)
        else:
            pass
    print('---合格者---')
    for p in pass_list:
        print(p)

judge(H=89, I=90, J=75, K=66, L=78, M=50, N=69)

 

▼実行結果

H: 89 points
I: 90 points
J: 75 points
K: 66 points
L: 78 points
M: 50 points
N: 69 points
---合格者---
H
I
J
L

 

このプログラムは、キーワード引数に整数を代入して7より大きい変数を「合格者」として出力させるものです。これをjudge関数として定義して書いています。forを用いて繰り返しを行い、arg[key]でargから値を取り出してそれが75より大きいかどうかを確かめる処理を行っていることがわかるでしょう。

 

for key in arg:
    print(f'{key}: {arg[key]} points')
    if arg[key] >= 75:
        pass_list.append(key)
    else:
        pass

 

このjudge関数を呼び出している部分を見てみると、

 

judge(H=89, I=90, J=75, K=66, L=78, M=50, N=69)

 

 一つ一つの引数すべてにキーワードが指定されていることがわかるでしょう。これで、引数が辞書として渡されることになります。

キーワードを指定していない引数があるとエラーが発生しますので注意しましょう。

 

変数のスコープ

「スコープ」は、変数を使える(適用される)範囲のことを意味します。関数の外で使っていた変数は、基本的には関数の中でも利用できます。関数の中の値は関数の外では使えませんが、外にあった値は関数の中でも利用できます。

ただし、forやwhileのような制御構文で使われる変数は構文の外でも使うことができることには十分注意して下さい。 

 

#関数内と関数外の違い
def func(x):
    x = 4
    print(f'関数内の変数:{x}')

x = 1
func(x)

 

▼実行結果

関数内の変数:4

 

func関数を定義して、関数の中と関数の外でそれぞれ同じ変数を用いてコードを書いています。このコードを書いて実行すると、func関数内で定義された「x=4」の処理しか反映されず、関数外の変数xの中身が反映されません。

上のコードを見ると、関数の外で関数の中と同じ変数を用いても取り出せないことがわかります。

 

関数内の変数を関数外でも適用させるには、「global」を使います。

 

global 変数

 

このように使います。

 

#globalを使わないコード
var = 2
def func():
    var = 5
    print(f'関数内の変数:{var}')

func()
print(f'関数外の変数:{var}')

 

▼実行結果 

関数内の変数:5
関数外の変数:2

 

#global
var = 2
def func():
    global var
    var = 5
    print(f'関数内の変数:{var}')

func()
print(f'関数外の変数:{var}')

 

▼実行結果

関数内の変数:5
関数外の変数:5

 

2つのコードの実行結果を比較してみると、後者のコードは関数内の変数が関数外に適用されていることがわかると思います。 

globalはプログラムのコードを書く上では役に立ちますが、値が変更されたり、無駄にメモリを使ったりしてしまうことがよくあります。 

globalを使う場合は十分に注意して下さい。

 

 

まとめ

【本日のまとめ】

  • 関数内で定義した変数は、その関数の中でしか使えない。関数の外側で定義した変数は関数の中でも使える。
  • 関数内で定義した変数を関数外でも適用したい場合、globalを使う。 
  • 定義する関数内の引数の前に「*」を2個つけると辞書のキーワードと値としてまとめられる。

 

本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。

この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!

明日は先日出したブログの問題の解答について解説していきます。

今日も最後まで読んでくださりありがとうございました!

 

 

【参考図書】

gihyo.jp