0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの便利技と注意点:関数編

Last updated at Posted at 2022-08-25

目次に戻る

関数のドキュメント:#を使わなくても関数にドキュメンテーション文字列を残す

関数定義の冒頭に文字列を書く(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]

目次に戻る

0
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?