開発言語 Python(その6)

【連載】

にわか管理者のためのLinux運用入門

【第167回】開発言語 Python(その6)

[2019/02/26 08:00]後藤大地 ブックマーク ブックマーク

サーバ/ストレージ

関数

Pythonでは当然、関数も作成できる。関数が作成できるようになると一気にプログラミング言語感が増してくるというものだ。Pythonでは「def 関数名(引数):」といった記述で関数を定義することができる。関数はよく使われる機能なので、書けるようにも読めるようにもなっておきたい。

例えば「The Python Tutorial」には次のような関数のサンプルコードが掲載されている。

>>> def fib(n):    # write Fibonacci series up to n
...  """Print a Fibonacci series up to n."""
...  a, b = 0, 1
...  while a < n:
...   print(a, end=' ')
...   a, b = b, a+b
...  print()
... 
>>> # Now call the function we just defined:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 
>>>

この関数は、以前取り上げたフィボナッチ数列を出力するコードを関数にしたものだ。Pythonの関数を説明する良いサンプルになっている。この関数サンプルからは、次のようなことがわかる。

  • 関数は「def 関数名(引数):」から書き始める。defで始まる行の最後は「:」で終える
  • defの次の行にはオプションでコメントを書くことができる。このコメントは関数の説明として使われる。できれば関数には必ずここに関数の説明を書くようにする
  • defの次の行からは必ずインデントを行う必要がある。このインデントが関数の範囲を表現することになる
  • 返り値を記載しなかった場合にはNoneが返り値として使われる


上記関数のサンプルコードには返り値が記載されていないが、この場合には自動的に返り値として「None」が使われるようになる。次のようにfib()関数の返り値をそのまま出力させることで確認できる。

>>> fib
<function fib at 0x7fa659069ea0>
>>> f = fib
>>> f(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 
>>>

上記のサンプルでは、関数を変数のようにしてほかの名前でアクセスできるようになっていることもわかる。

返り値を明示的に記述するとたとえば次のようになる。これはリストを返り値としている。返り値には条件に一致する値のみが含まれるようになっており、そのリストが返り値として戻るようになっている。

>>> def fib2(n):  # return Fibonacci series up to n
...  """Return a list containing the Fibonacci series up to n."""
...  result = []
...  a, b = 0, 1
...  while a < n:
...   result.append(a)    # see below
...   a, b = b, a+b
...  return result
... 
>>> f2000 = fib2(2000)    # call it
>>> f2000
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]
>>>

関数の引数にはデフォルト値を指定することもできる。次のように引数を書く部分で値を代入するようにすると、その値がデフォルト値として使われるようになる。

>>> def ask_ok(prompt, retries=4, reminder='Please try again!'):
...  while True:
...   ok = input(prompt)
...   if ok in ('y', 'ye', 'yes'):
...    return True
...   if ok in ('n', 'no', 'nop', 'nope'):
...    return False
...   retries = retries - 1
...   if retries < 0:
...    raise ValueError('invalid user response')
...   print(reminder)
... 
>>> ask_ok("Input something: ")
Input something: 1
Please try again!
Input something: 2
Please try again!
Input something: 3
Please try again!
Input something: 4
Please try again!
Input something: 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in ask_ok
ValueError: invalid user response
>>>

「関数引数のデフォルト値は1度だけ評価される」という点には注意しておく必要がある。次のサンプルを見るとよくわかる。

>>> i = 5
>>> 
>>> def f(arg=i):
...  print(arg)
... 
>>> i = 6
>>> f()
5
>>>

上記サンプルでは変数iが一度だけ評価されるので、関数を定義した段階でiに代入されている「5」がデフォルト値として使われていることがわかる。

関数の使い方としてはまずこの辺りが基本的なところだ。Pythonのコードでは関数が1つの処理単位として重要になってくる。この辺りの書き方や読み方はちゃんとマスターしておこう。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

ガートナー ジャパンは10月31日~11月2日、都内で「Gartner Symposium/ITxpo 2017」を開催。11月1日には同社 主席アナリストの青山浩子氏が登壇し「CIOが理解すべき統合システムの3大インパクト」と題する講演を行った。本稿では、講演の内容をダイジェストでお届けする。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る