仮引数とは

下記には2つの変数があります。
どちらの名前もaですが、別の変数になります。

a = 1

def add_one(a):
  a+=1
  return a

  • 変数aに1を代入します。
  • 変数aを関数add_one実引数として渡します。
  • 関数add_oneで、第1引数をaという名前の仮引数として受け取ります
  • 関数add_oneの変数aに1加算します。
  • 関数の外の変数aの値は1のままです。

この区別をすることで何が分かるのかな?

仮引数の種類

Pythonには、仮引数が5種類あります。

  • 位置のみ
  • 位置またはキーワード
  • キーワードのみ
  • 可変長位置
  • 可変長キーワード

def func(foo, bar=None):
  print(‘foo =’, foo)
  print(‘bar =’, bar)
  print()

func(1, 2) # 位置引数
func(3) # 位置引数
func(foo=4) # キーワード引数
func(5, bar=6) # 位置引数とキーワード引数
func(bar=8, foo=7) # キーワード引数(順番変更)

結果
foo = 1
bar = 2

foo = 3
bar = None  デフォルトで設定しているから、実引数を省略するとデフォになる。
       デフォルト値ありの後に、デフォルト値なしの指定はできない。
       たとえば、def func(foo=None, bar): passは、文法エラー。

foo = 4
bar = None

foo = 5
bar = 6

foo = 7
bar = 8

*の意味

def func1(arg, *, kw_only1, kw_only2):
*があると、その後ろがキーワードのみ使える仮引数になります。
kw_only1=1などが必要。
argは、位置引数 1のみでもOKだし、キーワード引数でもOK

可変長位置、可変長キーワードについて

可変長位置は、任意の個数の位置引数を受け取れます。
argsの前にをつけることで定義できます。
呼び出し側の実引数は、0個以上指定できます。何個指定しても、仮引数で受け取るときは、tuple型になります。

可変長キーワードは、任意の個数のキーワード引数を受け取れます。
kwargsの前に**をつけることで定義できます。
可変長キーワードは、仮引数の中で最後に書かなければいけません。
実引数は、0個以上指定できます。何個指定しても、仮引数で受け取るときは、dict型になります。

コメント

タイトルとURLをコピーしました