0
0

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 2024-04-23

関数への引数の渡し方として、位置引数とキーワード引数がある。

位置引数

引数を記載する順序で引数を指定

キーワード引数

キーワードで引数を指定

Example

def def_sample(animal,food):
    print(animal)
    print(food)

位置引数で関数に引数を渡す場合

def_sample('gorilla','banana')

引数の位置関係(1つめが animal 2つめが food)で引数を指定している。

キーワード引数で関数に引数を渡す場合

def_sample(animal='gorilla',food='banana')

関数側での引数の渡し方の制御

強制された引数の渡し方でないとエラーとなる。

位置引数渡しを強制する場合は、関数の宣言時に/を引数の末尾に含める

def positional_arg(animal,food, /):
    print(animal)
    print(food)

キーワード引数渡しを強制する場合は、関数の宣言時に*を引数の先頭に含める

def keyword_arg(*,animal,food):
    print(animal)
    print(food)

複合型

def combined_arg(animal1,animal2,/,*,food1,food2):
    print(animal1,animail2)
    print(food1,food2)

animal1,animal2 → 位置引数を強制
food1,food2 → キーワード引数を強制 

キーワードの衝突

def foo(gorilla,**kwds):
    return 'gorilla' in kwds

この場合、辞書**kwdsKey'gorilla'を使うことはできない。
引数のキーワード:gorilla と、辞書**kwdsKey'gorilla'が衝突し、エラーとなる。

>>>foo(1,**{'gorilla':1})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() got multiple values for argument 'gorilla'

位置関数を強制すると、1つめの引数をgorillaと認識し、辞書**kwds'gorilla'をキーワードとして認識される。

def foo(gorilla, /, **kwds):
    return 'gorilla' in kwds
>>> foo(1,**{'gorilla':2})
True

いつ使うか

位置引数:引数の名前に意味が無く、順序が重要となる場合。

キーワード引数:引数の名前に意味が有り、それにより関数の定義が明らかになる場合。

任意引数リスト

def concat(*args, sep='/'):
    return sep.join(args)

可変引数*argsは、関数に渡される引数すべてを回収するので、可変引数の後におかれる引数は、キーワード引数を強制される。

>>> concat('a','b','c')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: concat() missing 1 required keyword-only argument: 'sep'

>>> concat('a','b','c',sep='.')
'a.b.c'

参考:Guido van Rossum.Python チュートリアル.O'REILLY,第4章

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?