下記には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型になります。
コメント