デカ文字Python

デカ文字&短文でPythonを簡潔にまとめたブログ

Python SoloLearn Pythonicness & Packaging

 

Sololearnも最後になってきました。

 

 

 

Function Arguments

*args

Using *args as a function parameter enables you to pass an arbitrary numeber of arguments to that function.

 defで関数を定義する際、関数のパラメータを指定するが、Pythonという言語はそのパラメータの個数に煩い。その例を書いてみる。

def func(a, b):
print(a,b)

func(1,2,3)
>>>TypeError: func() takes 2 positional arguments but 3 were given

 def funcで定義したパラメータの数がa,bの二つだけだから、それ以上の変数を渡すとこのようにエラーになってしまう。

エラーを起こさないようにするにはどうしたらいか。定義の際に、

def func(a, b, c):

とすれば早い話なのだが、それでも四つ以上の変数を渡す際はエラーが生じてしまう。そもそも定義時において、将来何個の変数を渡す関数にするかなんて前もって決めることは難しい。

そうしたときに活躍するのが、パラメータ*argなのである。

これはタプルとして定義されるパラメータである。

def func(a, *args):
print(a, args)

func(1,2,3)
>>>1 (2, 3)

パラメータargsの位置にある2,3はタプル(2,3)としてfuncに渡された。

 

**kwargs

**kwargs allows you to handle named arguments that you have not defined in advance.

The keyword arguments return a dictionary in which keys are the arguments names ,and the values are the argument values.

def func()においてパラメータに**kwardを設定しておけば、その関数は引数に代入式を入れるだけで辞書型を渡すことができる。

def func(a, **kwargs):
print(a, kwargs)


func(2, c=5)
>>>2 {'c': 5}

 

こんなまどろっこしいことせずとも、
引数を辞書型で直接渡せばいいだけでは……

 

と思うのはぼくだけか……

def func(a, b):
print(a, b)


func(2, {"c":5})
>>>2 {'c': 5}
 

 

引数内で、パラメータに使った文字に代入する形を書くと、

()で括ることでグループ化できる。 グループを含むmatchオブジェクトは数字の引数で呼び出すことができる。

 

__main__

Most Python code is either a module to be imported, or a script that does something.However, sometimes it is useful to make a file that can be both imported as a module and run as a script.

 modulesというのは便利なもので、関数、クラスみたいな名前空間の一種として、関数を含む変数を保存することができる。

func.py
def func(a, *args):
print(a, args)