46815


① `:param [変数名]:`  
はコード中でどんな役割をするのでしょうか？

日本語サイトであれば、  
（<https://qiita.com/methane/items/e95c578c3d8fc5f1f62e>）（python paramで検索しヒット）  
が、おそらく参考になると思うのですが、読んでもいまいちつかめません。  
少しかみ砕いた説明が欲しいです。

文脈として全コードを以下に掲載します。

[code]

    def bottles_of_beer(bob):
        """ Prints Bottle of Beer on the Wall lyrics.
    
        :param bob: Must be a positive integer.
        """
        if bob<1:
            print("""No more bottle of beer on the wall.
                  No more bottles of beer.""")
            return
    
        tmp=bob
        bob-=1
        print("""{} bottles of beer on the wall.
              {} bottles of beer.
              Take one down,pass it around,
              {} bottles of beer on the wall.
              """.format(tmp,tmp,bob))
        bottles_of_beer(bob)
    
    bottles_of_beer(99)
    
[/code]

②また、このコードでreturn以下が空白となっていますが、デフォルト（？）では何を実行すべきという意味になるのでしょうか？


CC BY-SA 4.0
2018-07-21T16:38:28.967
46814
2018-07-22T11:30:14.823
29238
question
python
:param [変数名]:の役割について、return以下が空白の時の挙動について


`:param [変数名]:`の記述は **docstring** と呼ばれるコメント記法の一つです。

コメントなのでプログラムの動作に直接の影響は与えませんが、関数の使い方などを決められたフォーマットで記述しておくことで、IDEなどから参照したり、ドキュメント出力ができるようです。  
記法にはいくつかスタイルがあって、質問の例に挙げられたものは「reStructuredText(reST)スタイル」と呼ばれるもののようです。

参考：  
[可読性を上げるための、docstringの書き方を学ぶ（NumPyスタイル）](https://qiita.com/simonritchie/items/49e0813508cad4876b5a)  
[Pythonのdocstring（ドキュメンテーション文字列）の書き方](https://note.nkmk.me/python-docstring/)

* * *

質問のコードについては **再帰呼出し** をしています。

一番最後の行で「初期値=99」を指定して一度呼び出すと、1ずつ減らしながら(=ビールを飲みながら)再帰呼出しを繰り返し、`return`の部分に処理が移るのは「数字が`0`になったとき=ビールが無くなったとき」です。  
`param`の説明もこのため「正の整数」を指定しろとなっていますね。


CC BY-SA 4.0
2018-07-21T17:46:20.297
46815
2018-07-21T17:46:20.297
3060
46814
answer


`:param <type> <variable>: <description>`
はSphinxで処理されるドキュメントの記法で、情報フィールドリストと言います。

<http://www.sphinx-doc.org/ja/master/usage/restructuredtext/domains.html#info-
field-lists>

Pythonの多くのライブラリはSphinxでドキュメント生成を行っているため、docstringの書き方の中にも情報フィールドリストが広く使われています。また、PyCharmなどのIDEもこの情報フィールドリストを解釈してくれます。このような理由から、Sphinxを使わないプロジェクトのdocstringであっても情報フィールドリストの書き方を踏襲しているプロジェクトもあります。


CC BY-SA 4.0
2018-07-22T01:29:45.010
46817
2018-07-22T01:29:45.010
806
46814
answer


> ②また、このコードでreturn以下が空白となっていますが、デフォルト（？）では何を実行すべきという意味になるのでしょうか？

関数のなかで、`return`のみが実行された場合、呼出元に`None`が返却されます。  
例としては、以下になります。

[code]

    # 1を返却する関数
    def myfunc01():
        return 1
    
    # 実行すると1が返却され表示される
    print(myfunc01())  #=> 1
    
    # 何も返却しない関数
    def myfunc02():
        return
    
    # 実行するとNoneが返却され表示される
    print(myfunc02()) #=> None
    
[/code]


CC BY-SA 4.0
2018-07-22T11:30:14.823
46834
2018-07-22T11:30:14.823
46814
answer