Function Parameters
35876 ワード
Python Function Parameters
Pyhtonでは、関数はparameter
を受け入れ、return
の値をoutに返します.
そして、関数が呼び出されると、parameter
が関数に渡されて呼び出される(pass).
関数のparameter
には様々な形式があり、まず、最も基本的な形式はparameter
の値を順次伝達することである.これをPositional Argumentsと呼びます.
Positional arguments
def my_profile(name,age):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile("박세용", 27)
# 제 이름은 박세용이고, 나이는 27 입니다.
このうちdefmy profile(name,age)カッコ内にはname, age
がパラメータとして使用される.
my profile(「朴世勇」,27)カッコ内には"박세용", 27
個のarumenetがある.
Keyword Arguments
しかしながら、上記のように、parameter
の値を順番に与えることは不可能である.parameter
の名前で値を順番に渡すことはできません.
キーワードargumentsと呼ばれます.parameter
値はkeyword arguments方式で伝達され、実際のパラメータ順序は変更可能である.def my_profile(name,age):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile(age = 27, name = "박세용")
# 제 이름은 박세용이고, 나이는 27 입니다.
Keyword Argumentsの使用
def my_profile(name,age):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile("박세용", 27)
# 제 이름은 박세용이고, 나이는 27 입니다.
def my_profile(name,age):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile(age = 27, name = "박세용")
# 제 이름은 박세용이고, 나이는 27 입니다.
順番が変わっても大丈夫で、読みやすさも向上します.
parameter
の順序で関数に値を渡すと、うっかり値を変更してもわかりにくいです.これに対して、Keyword Argumentsは
parameter
の名前に合わせて値を関数に渡し、誤って値を変更する確率は比較的小さい.また,コードを読む人もどの値をひっくり返すかをはっきり知ることができるので,可読性が向上する.
Mixing positional arguments and keyword arguments
Mixing position argumentsとkeyword arguments
parameter
値の位置パラメータと混合使用位置パラメータです.
次の例です.
def my_profile(name,age):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile("박세용", age = 27)
# 제 이름은 박세용이고, 나이는 27 입니다.
このように使えますが、ここで注意したいのは、キーワードargumentsは順番が変わっても構いませんが、位置arguments部分は順番を守らなければなりません.たとえば、次のコードのように関数を呼び出すと、
error
が生成されます.def my_profile(name,age):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile(age = 27, "박세용")
> Traceback (most recent call last): File "python", line 1 SyntaxError: positional argument follows keyword argument
エラーの原因は、キーワードパラメータ(age = 27)
が位置パラメータ("박세용")
よりも前であるため、関数が呼び出される.Positional arguments
は順序を守らなければならないが、順序が間違っているので、間違いが発生する.Parameter Default Value
関数の
parameter
に対してdefault値を定義できます.Default
の値を定義したparamter
は、関数呼び出し時に値を超える必要はありません.値を超えていない場合、default値は自動的に値を超えます.def my_profile(name,age=27):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile("박세용")
# 제 이름은 박세용이고, 나이는 27 입니다.
함수를 호출 할 때 2번쨰 parameter 값을 정의하지 않았으나 default 값이 정의 되어 있음으로 default 값이 자동으로 사용된다.
default 값 -> age = 27
ただし、default値を定義したパラメータは、default値を定義していないパラメータよりも先ではないことに注意してください.non-default valueparameterの前にdefault valueparameterを宣言すると、次の例に示すsyntax errorが表示されます.def my_profile(name = "박세용", age):
print(f"제 이름은 {name}이고, 나이는{age} 입니다.")
my_profile(27")
> Traceback (most recent call last): File "python", line 1
SyntaxError: non-default argument follows default argument
上記の内容を学習する過程で、突然関数を定義する際にnon-defultvalueparameterの前でdefaultを定義できない原因に疑問が生じ、原因を深く理解したい.なぜ関数を定義するときにdefault valueparameterをnon-deffault valueparameterの前に定義できないのですか?
まず、
parameter
の全体的な順序を上図から見ることができる.上の図を見て、自分で説明すると、
1. positional arguments들을 받는 parameter
2. default value를 갖지만 positional arguments를 받는 parameter
3. variable length positional arguments(가변 인수,*args)의 parameter
4. keyword arguments를 받는 parameter들 중, non-default value 그리고 default value
5. variable length keyword arguments(가변 키워드 인수,**kwargs)
次の順序で表示されます.これらの順序を守らないと、文法の間違いが発生します.
定義されたパラメータの順序に従って作成しないと、関数がどのパラメータに値を取るべきかが混同されます.
pyhtonは、関数を定義または呼び出したときにパラメータが正しく呼び出されるかどうかを評価し、決定します.
したがって,パラメータ(argumenet)に位置パラメータを順次割り当て,後でキーワードパラメータを割り当てる.
上記の例をもう一度見てみましょう.
def my_profile(name = "박세용", age):
print(f"제 이름은 {name}이고, 나이는 {age} 입니다.")
my_profile(27)
呼び出された関数my profile(「27」)は、関数の最初のパラメータname=「朴世勇」に入ってから正常に呼び出されなければならないが、パラメータname=「朴世勇」はすでに「朴世勇」というパラメータ値を受け入れているため、文法エラーが発生した.また,27という因数がどのパラメータを指定しているのか分からないので,明示的に割り当てる必要がある.
エラーを解決するために、以下の順序で変更できます.
def my_profile(age, name = "박세용"):
print(f"제 이름은 {name}이고, 나이는 {age} 입니다.")
my_profile(27)
# 제 이름은 박세용이고, 나이는 27입니다.
位置パラメータと可変長パラメータの位置
まず位置因数と可変因数が何であるかを簡単に理解します.
位置パラメータの例
def my_profile(name,age):
print(f"이름 : {name}, 나이: {age}")
my_profile("박세용", 27)
# 이름 : 박세용, 나이 : 27
可変パラメータの例
def my_profile(*args):
for i in args:
print(i)
my_profile("박세용", "나이 : 27","주소 : 경기도")
# 박세용
# 나이 : 27
# 주소 : 경기도
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
上の関数を実行するとエラーが発生します.Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> func_param_with_var_args("정우성", "01012341234", "seoul", 20) TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
エラーが発生した原因はparameter
の順序です.位置パラメータは先に来るべきで、それから変数lengthパラメータです.
エラーを解決するには、コード
age
と*args
を再確認してください.def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
# name=정우성
# args=('seoul', 20)
# age=01012341234
前に示したように、エラーが解決されたことがわかります.可変キーワードパラメータ(variablelengthキーワードarguments)
키워드 = 값
形式で関数を呼び出し、dict形式'key' : 'value'
で関数内部に渡される.def func_param_with_kwargs(name, age, **kwargs, address=0):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# 오류 발생 -> `SyntaxError: invalid syntax`
上記の関数定義には、可変キーワードパラメータが含まれています.ご覧のように、可変キーワード引数は中央にあり、関数定義自体にはなりません.
nameは
Regulal Positional Arguments
で、年齢
Regular Positional Arguments
、**kwargsは
Variable Length Keyword Arguments
で、addressは
eyword-Only Arguments With Defauls
です.したがって、
variable length keyword arguments
はKeyword-Only Arguments With Defauls
より前にあるため、エラーが発生します.上記のエラーを解決するために、最後に可変キーワードパラメータを送信する必要があります.
def func_param_with_kwargs(name, age, address=0, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# name=정우성
# age=20
# kwargs={'mobile': '01012341234'}
# address=seoul
位置パラメータとキーワード可変キーワードパラメータ(variablelengthキーワードパラメータ)
前の2つの例では、位置パラメータ、可変パラメータ、および可変キーワードを一度に定義します.
変数係数、変数キーワード係数は後ろに置くべきだと合理的に推測できる.
パラメータの優先度を再整理します.
位置パラメータ->可変パラメータ->可変キーワードパラメータの順に配置します.
次に例を見てみましょう.
def mixed_params(name="아이유", *args, age, **kwargs, address):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# 오류 발생 : `SyntaxError: invalid syntax`
関数を定義できないエラーが発生しました.まず、これらのパラメータが何であるかを見てみましょう.
年齢
Regular Positional Arguments
、name="IU"は
Default Arguments
で、*argsは
Variable Length Positional Arguments
で、addressは
Non-Default Keyword-Only Arguments
**kwargsはVariable Length Keyword Arguments
で、そうです.
正常に出力するために、上記のいくつかのエラーを解決した例を考慮して、各パラメータの位置を優先度別に変更してみました.
def mixed_params(age, name="아이유", *args, address, **kwargs):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# name=정우성
# args=('01012341234', 'male')
# age=20
# kwargs={'mobile': '01012341234'}
# address=seoul
パラメータの順序age
-> name="아이유"
-> *args
-> address
-> **kwargs
に代わる正常な出力を確認できます.
.Reference
https://velog.io/@wind1992/%EA%B0%80%EB%B3%80%EC%9D%B8%EC%88%98%EC%99%80-%EA%B0%80%EB%B3%80%ED%82%A4%EC%9B%8C%EB%93%9C-%EC%9D%B8%EC%88%98
https://wikidocs.net/84426
https://opentutorials.org/module/4811/28493
https://devpouch.tistory.com/82
Reference
この問題について(Function Parameters), 我々は、より多くの情報をここで見つけました https://velog.io/@sae0428/Function-Parametersテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol