Pythonで改行なしでprintする方法:end オプション
Pythonの組込み関数である print のオプション end を使って改行を抑制します。
1 2 3 4 5 |
# end オプションを「空」で指定する print("PYTHON!!", end="") # PYTHON!! |
end オプションが無いと、なぜ改行が出力されるのか?
少しだけ、Python 言語の実装を見てみましょう。
組込み関数 print は、Python/bltinmodule.c に実装されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
static PyObject * builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) { static const char * const _keywords[] = {"sep", "end", "file", "flush", 0}; static struct _PyArg_Parser _parser = {"|OOOp:print", _keywords, 0}; PyObject *sep = NULL, *end = NULL, *file = NULL; int flush = 0; int i, err; if (kwnames != NULL && !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser, &sep, &end, &file, &flush)) { return NULL; } |
指定できるオプションの配列 _keywords に end の文字列が入っており、
PyObject 型の end に値が格納されるようですね。
もう少しこの関数を読み進めると、以下のような処理が出てきます。
1 2 3 4 5 6 7 8 |
(snip) if (end == Py_None) { end = NULL; } (snip) if (end == NULL) err = PyFile_WriteString("\n", file); |
end オプションを指定していない場合 Py_None になり、end 変数に NULL が設定されます。
そして、end 変数が NULL の場合、「\n」が出力されるという流れですね。