目次
インタプリタの関数
abs()
int/float の引数の絶対値をリターンする。
print("{}, {}, {}".format(abs(-4), abs(1.56), abs(3 + 4j)))
4, 1.56, 5.0
ord()
str 型の引数 1 文字の Unicode コードポイントをリターンする。
print(ord('$'))
36
デフォルト引数
例えば引数の数字の値をふやす関数を作ったとします。
def increase(target, sub):
return target + sub
「こんな単純な機能関数にしてんじゃねえよ」って、まあその通りなんですが、ならこれを動かしたらどうなるかは大体予想がつきますよね。
def increase(target, sub):
return target + sub
print(increase(3, 5))
8
当然の結果すぎて何も言えませんが、話はここからです。この increase を使う場面では基本的に sub=1 で動かすことが多いとしましょう。そんな時、いちいち第 2 引数を入れるのは面倒ですよね。そこで
def increase(target, sub=1):
と書きます。第 2 引数の後ろに "=1" がついただけです。どのような挙動を示すか見てみましょう。
def increase(target, sub=1):
return target + sub
print("{}, {}".format(increase(3), increase(3, 5)))
4, 8
つまり、
- 第 2 引数を入れれば sub にその値が代入される
- 第 2 引数を入れなければ sub に 1 が代入される
となります。
キーワード引数
まずはキーワード引数がどういうものかを体感していただくために例をあげましょう。
print('This is a line.')
print('This is a new line.')
print('\n')
print('This is a line. ', end='')
print('This is not a new line.')
This is a line.
This is a new line.
This is a line. This is not a new line.
このように print 関数は文字列などを引数にとって、それをコンソールに出力しますが、必ず改行します。しかし end='' とすることで「改行の代わりに空文字 '' を文末につけてくださいね」という指令になり、結果改行されなくなります。では
print('Is this OK?', '')
print('Is this a new line?')
を実行するとどうなるかというと、
Is this OK?
Is this a new line?
となって、結局改行されてしまいましたね。つまり end というキーワードがないと改行阻止はできないんですよ。
キーワード変数がどういうものか見ていただいたところで、「自作の関数にもキーワード変数つけてみたいな」と思うかもしれません。もちろん実装可能です。一番簡単な例で言うとデフォルト引数です。この例をみてみましょう。
def add(base, addition=1, repeat=5):
for count in range(repeat):
base += addition
return base
print(add(2, repeat=10))
12
必須となる引数の後にキーワードを入れ込んでいけばうまく作動するわけですね。また「キーワードをつけていないと使用を認めない」という場合には、こうすることでできます。
def add(base, *, addition=1, repeat=5):
for count in range(repeat):
base += addition
return base
アスタリスク * 以降は全てキーワードを付けて引数に入れないといけなくなるので、例えば
print(add(2, 2, 3))
とすると結果は
Traceback (most recent call last):
File "/Users/... .py", line ..., in <module>
print(add(2, 2, 3))
TypeError: add() takes 1 positional argument but 3 were given
というエラーを吐き出します。