関数のドキュメント:#を使わなくても関数にドキュメンテーション文字列を残す
関数定義の冒頭に文字列を書く(PEP257に従い""" """を使用します)
>>> def greetings(name):
"""nameに入った人に挨拶を交わす"""
print(f'こんにちは{name}さん')
>>> greetings('太郎')
こんにちは太郎さん
定義した関数名.__doc__でアクセスできる
>>> greetings.__doc__
'nameに入った人に挨拶を交わす'
help(定義した関数名)でも表示できる
>>> help(greetings)
Help on function greetings in module __main__:
greetings(name)
nameに入った人に挨拶を交わす
関数に引数を渡す時の影響
変数だけを渡しても影響を受けない
>>> def ch_arg(str):
str = 'Apple'
>>> fruit = 'Grape'
>>> ch_arg(fruit)
>>> fruit
'Grape'
リストを渡すと影響を受ける
>>> def change_arg(n):
n[0] = 'Banana'
>>> fruits = ['Apple', 'Grape']
>>> change_arg(fruits)
>>> fruits
['Banana', 'Grape']
リストを渡しても影響を受けないようにするにはリスト全体のスライスをコピーする
>>> fruits = ['Apple', 'Grape']
>>> change_arg(fruits[:])
>>> fruits
['Apple', 'Grape']
関数に複数の引数を渡す時に*(アスタリスク)を活用する
変数に複数の値を定義して関数に引き渡す時、*をつけないと「1つしかない」とエラーが出る
>>> params = (1, 2)
>>> def add(x, y):
return x + y
>>> add(params)
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
add(params)
TypeError: add() missing 1 required positional argument: 'y'
*をつけて渡すと複数が格納されている変数を渡せる
>>> add(*params)
3
上の例ではタプルにしているが、リストでも引き渡せる
>>> para = [1, 2]
>>> add(*para)
3
辞書型を引き渡す場合は*を2つつける
>>> def hi_there(greetings, name):
print(f'{greetings}, {name}')
>>> params = {'greetings':'Hello', 'name':'Everyone'}
>>> hi_there(**params)
Hello, Everyone
関数を呼び出す度にリストを初期化してリストに値を入れる方法
リストを初期化しないと、関数を呼び出す度にリストの中が増えていく
def saving_box(coin, box=[]):
box.append(coin)
return box
# 100円玉投下1回目
insert_coin = saving_box(100)
print(insert_coin)
# 100円玉投下2回目
insert_coin = saving_box(100)
print(insert_coin)
出力結果
[100]
[100, 100]
リストを初期化すると、関数を呼び出すごとに、リストの中身がリセットされる
# デフォルトリストをNoneで指定して、
# 関数の中でリストがNoneであれば初期化する処理を追加すると、
# 呼び出す度にリストがリセットされる
def saving_box(coin, box=None):
if box is None:
box = []
box.append(coin)
return box
# 100円玉投下1回目
insert_coin = saving_box(100)
print(insert_coin)
# 100円玉投下2回目
insert_coin = saving_box(100)
print(insert_coin)
出力結果
[100]
[100]