TIL 13|Python関数とパラメータ、可変パラメータ


Function

def 함수명(parameter):
  실행문1
  실행문2
  ...
  return(또는 print사용) 리턴 값 

  #파라미터와 리턴은 있을 수도 없을 수도 있다.

parameter


1.位置パラメータ(基本)
def name(last, first):
  return last + first

name("이","코딩")

>>> "이코딩"
「この符号化」で値を返すには、last、firstパラメータの順にパラメータを追加します.
2. Keyword Argument
def name(last, first):
 return last + first

name(first="코딩",last="이")

>>> "이코딩"
keywordパラメータ方式を使用すると、順序を変更したり、可読性を高めたりすることができます.
3.Mixing position arguments and keyword argumentsの混合
def name(last, first, age):
  print(f"{last+first}, {age}")

name("이", age=25, first="코딩")

>>> "이코딩, 25"
注意事項🚨
keyword argumentsは順序を変えることができます
位置論点部分は順序を守らなければならない.
4. Parameter Default Value
1.関数のパラメータにデフォルト値を定義します.
2.パラメータがなくても、呼び出し関数はdefault値を自動的に超えます.
def name(last, first="코딩"):
return last + first

name("이")

>>> "이코딩"
注意事項🚨
default値で定義されたパラメータは、未定義のパラメータの前には使用できません.
どうしてだめなの?
パラメータの値を正確に決定するためだと思います.
たとえば、次のコードを表示すると、
def name(last, first="코딩", age):
print(f"{last+first}, {age}")

name("이",25) 
#SyntaxError: non-default argument follows default argument
2番目のパラメータ25はfirstとageの値が何であるか分からない.
最初に定義したデフォルト値は、値がない場合に自動的にインポートされます.
確定した値ではないので、順番に問題が発生します.

可変パラメータ


argsはパラメータを表す英語の単語argumentsの略で、通常使用されます.
kwargsはキーワードargumentsの略で、argsと同様に慣例を使用します.

可変パラメータは、入力値が何個あるか分からない場合に使用します。

def foo(a, *varargs, **kwargs): 
    print(a, varargs, kwargs) 

## foo 호출
foo(2, 9, 12, 34, x=3, name="bob") 

>>> 2 (9, 12, 34) {'x': 3, 'name': 'bob'}
args-tuple
kwargs-辞書
tuple:
()かっこ内のデータ(作成、削除、または変更不可)
dictionary:
{}カッコで囲まれたデータ、キー:値の形式にデータが含まれ、順序がありません.

パラメータ順序👇


positional args > default args > *args > keyword args > **kwrags

パラメータ順序、検索エラーに注意👀


<第1題>
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)
<エラー>
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
argsは基本パラメータageの前にあるのでエラーが発生しました.
<修正>
def func_param_with_var_args(name, age, *args):
<第二題>
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")
<エラー>
def func_param_with_kwargs(name, age,
**kwargs, address=0):
^
SyntaxError: invalid syntax
default値はパラメータを定義する前に**kwargsにエラーが発生しました.
<修正>
def func_param_with_kwargs(name, age, address=0, **kwargs):
<第三題>
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")
<エラー>
def mixed params(name=“iu”,*args,age,**kwargs,address):
^
SyntaxError: invalid syntax
パラメータの順序は以下の通りです.
positional args > default args > *args > keyword args > **kwrags
<修正>
def mixed_params(age, name="아이유", *args, address, **kwargs):