#Python 基本操作<関数>#
##はじめに
自分が不安な部分についてのみ,Pythonの基本操作について復習する.
その第2弾として関数について記述する.
##Pythonにおける関数
def 関数名(引数):
処理内容
このように定義されるが,個人的に引数についてはあまり意識していなかった.
ここでは,引数について注目することで,関数の理解を深める.
##引数
引数には主に2種類ある.
・仮引数:関数で宣言される引数
・実引数:関数に渡す引数
#関数の定義
def main(a):
return a+1
#関数の使用
main(x)
上記のコードでいうとaが仮引数,xが実引数となる.
##仮引数への引き渡し
関数の使用時には実引数を指定するが,仮引数に値を引き渡していることを意味する.
####どのように引き渡すのか?
引き渡し方にも2種類ある.
・値渡し :仮引数に実引数をコピーする(実引数の値は変更されない)
・参照渡し:実引数のアドレスを参照する(実引数の値は変更され得る)
##Pythonでの引数
基本的に参照渡しが用いられている
しかし...
実引数における変数の方によって,異なる動作をする
その動作により,更に2つに分けられる.
#####immutable型:関数の中で書き換えられない
✓整数・浮動小数点数・文字列・タプル など
#####mutable型:関数の中で書き換えられ得る
✓リスト・辞書型(dict)・集合(set) など
##検証
次のコードで本当に実引数に用いた変数が書き換えられてしまうのかを検証した.
"""
2020/12/13
@Yuya Shimizu
関数の引数
"""
# 関数を定義
def func_num(a):
a -= 1
return a
def func_char(a):
a += " Hello"
return a
def func_list(a):
a[0] -= 1
return a
def func_dict(a):
a["1"] -= 1
return a
############## immutable型
#実引数:整数
x_int = 1
func_num(x_int)
print("実引数", x_int)
#実引数:浮動小数点数
x_float = 1.5
func_num(x_float)
print("実引数", x_float)
#実引数:文字列
x_char = "abc"
func_char(x_char)
print("実引数", x_char)
############## mutable型
#実引数:リスト
x_list = [1, 2, 3]
func_list(x_list)
print("実引数", x_list)
#実引数:辞書型(dict)
x_dict = {"1":10, "2":20, "3":30}
func_dict(x_dict)
print("実引数", x_dict)
##検証結果
確かに,immutable型の実引数は関数実行後もデータの変化はなく,mutable型の実引数は関数実行後にはその影響を受けた状態となっていた.
##感想
関数は使ってきていたが,引数にそのようなルールがあることも知らず,今までよくわからないエラーの原因の1つであったことに気づけて,すっきりしている.
##参考文献
Pythonで始めるアルゴリズム入門 伝統的なアルゴリズムで学ぶ定石と計算量
増井 敏克 著 翔泳社