0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

関数の引数について(python)

Posted at

#はじめに
この記事は、半分は自分のメモ用に作成した記事です。
ただ、自分が見返した時に分かりやすいメモにするためにも、
誰が見ても分かりやすい記事になるよう心がけたつもりです。
(その方が、間違ってた時に指摘もしてもらえそうだし・・・(本音))

#STEP1:実引数と仮引数について
引数とは、仮引数と実引数との2つに大きく分類されます。
 仮引数:関数定義で使用。実際のオブジェクトに仮の名前を付けるので仮引数。(argument)
 実引数:関数呼び出しで使用。実際のオブジェクトなので実引数。(parameter)


def foo(a):  # 仮引数
  a+=1
  return a

print(foo(1)) #実引数
 >>>2

#STEP2:仮引数の性質
仮引数の重要な性質は、関数の呼び出し毎に設定されることです。
具体例を見ていきましょう。


def remove_first(lst):
    lst = lst[1:]
    print(lst)


lst = [1, 2, 3, 4]
print(lst)
remove_first(lst)
 >>> [2, 3, 4]
remove_first(lst)
 >>> [2, 3, 4]

ここで言いたいのは、1回目と2回目のremove_first(lst)の結果が同じであると言うこと。
つまり、「1回めに呼ばれたときの仮引数」と「2回めに呼ばれたときの仮引数」は、
同じ変数であっても別の変数として扱われていると言うことです。

#STEP3:仮引数の種類
前述した仮引数には5つのパターンがあります。

  • 位置またはキーワード:いわゆる普通の関数定義
  • 位置のみ:後述
  • キーワードのみ:後述
  • 可変長位置:後述
  • 可変長キーワード:後述

とりあえず、ここは通常の位置またはキーワードを紹介します。


def foo2(a, b=3):  # aが位置引数、bがキーワード引数
  return a + b
def foo3(a=1, b):  # エラー(位置引数の前に、キーワード引数は設定できない)
  return a + b

print(foo2(1)) # 位置引数(bの値は関数定義時のデフォルト値がで適用される)
 >>>4
print(foo2(1,5)) # 位置引数(a=1,b=5)
 >>>6
print(foo2(1,b=5)) # 位置引数&キーワード引数
 >>>6
print(foo2(a=1,b=5)) # キーワード引数
 >>>6
print(foo2(b=2)) # エラー
 >>>TypeError
print(foo2(b=3,a=1)) # キーワード引数の順番入れ替え

上記から分かる重要な性質として、

  • 仮引数では、位置引数の前にキーワード引数は設定できない
  • キーワード引数は実引数で設定をしなかった場合、仮引数のデフォルト値が適用される
  • 実引数において、キーワード引数は順番を入れ替えて設定できる
  • 実引数では位置引数としても、キーワード引数としても呼び出せる

#STEP4:位置のみ、キーワードのみ
次は、前述した位置のみ、キーワードのみを紹介します。
まず、位置のみですが、
関数定義時に、/の前にある引数は位置引数でしか呼び出せない
一方、キーワードのみですが、
*関数定義時に、の後にある引数はキーワード引数でしか呼び出せない


def func(a,*,b,c):
    return a + b + c

def func2(a, /):
    return a 

print(func(1,b=2,c=3)) # bはキーワード引数で呼び出さないとエラーになる
print(func2(1)) # aは位置引数で呼び出さないとエラーになる

#STEP5:可変長位置、可変長キーワード
まず可変長位置ですが、任意の個数の位置引数を受け取れる引数のことです。
関数定義時に引数の前に*をつけることで位置引数になります(1つの関数に1回まで)
可変長キーワードは、任意の個数のキーワード引数を受け取れる引数のことです。
*関数定義時に引数の前に*をつけることで位置引数になります(1つの関数に1回まで)


def func(*a, **b):
    print(a)
    print(b)

func(1,2,3,b=4,c=5)
 >>> (1, 2, 3)
     {'b': 4, 'c': 5}
0
2
0

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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?